Nhibernate linq で "In" 句を使用してクエリを生成することは可能ですか? 例 - Where AnID in (x,y,z)
?
8799 次
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 に答える