25

Nhibernate linq で "In" 句を使用してクエリを生成することは可能ですか? 例 - Where AnID in (x,y,z)?

4

3 に答える 3

35

潜在的なすべてのLINQクエリの生成に関するnHibernateの状態はわかりませんが.Contains()、INの生成に使用できるはずです。

var list = new int[] { x, y, x };
var q = db.Entities.Where( e => list.Contains( e.AnID ) );
于 2010-03-30T16:37:34.963 に答える
4

同意しました、これは機能します。「not in」に対して生成されたSQLが奇妙であることがわかりました(3.3.0 GAの時点)

...
from
  mytable t0_
where
  case
    when t0_.testValue in (
              @p0 , @p1 , @p2
          ) then 1
          else 0
    end=@p3
@p0 = 9 [Type: Int32 (0)],
@p1 = 99 [Type: Int32 (0)],
@p2 = 109 [Type: Int32 (0)],
@p3 = False [Type: Boolean (0)],
...

「含まれていない」ことがより明確だった場合に、これを「ケース」にするのは少し奇妙に思えます(すべての行を読むつもりではなく、トレース/プロファイルで多分)。

(...その日の後半に...)

上記の「奇妙な」SQLの選択は、使用した場合のみであることに気付きました

.Where(e => list.Contains(e.AnID) == false)

私が使用した場合

.Where(e => !list.Contains(e.AnID))

生成された SQL はよりクリーンです ('not in' を使用)。

于 2012-04-22T10:26:55.793 に答える
0

NHibernate には、RestrictionExtensions の一部に IsIn オプションがあります

x => x.Name.IsIn( new[] {"a", "b"} )

于 2015-05-29T18:00:10.170 に答える