是否可以让Nhibernate linq生成带有“In”子句的查询?例如 - Where AnID in (x,y,z)
?
答案 0 :(得分:29)
我不知道nHibernate在生成所有潜在LINQ查询方面的状态,但您应该能够使用.Contains()
生成IN。
var list = new int[] { x, y, x };
var q = db.Entities.Where( e => list.Contains( e.AnID ) );
答案 1 :(得分:3)
同意,这确实有效。我发现生成的'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)],
...
当'not in'更清楚时(这不是我计划读取每一行,但可能在跟踪/配置文件中),这似乎对'case'有点奇怪。
(......那天晚些时候......)
我意识到上述'奇怪'的SQL选择只有在我使用
时.Where(e => list.Contains(e.AnID) == false)
如果我用过
.Where(e => !list.Contains(e.AnID))
生成的SQL更清晰(使用'not in')
答案 2 :(得分:0)
NHibernate有一个选项IsIn RestrictionExtensions
x => x.Name.IsIn(new [] {“a”,“b”})