是否可以让 Nhibernate linq 生成带有“In”子句的查询?例如 - Where AnID in (x,y,z)
?
问问题
8799 次
3 回答
35
我不知道 nHibernate 在生成所有潜在 LINQ 查询方面的状态,但您应该能够使用它.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
同意,这确实有效。我发现为“不在”生成的 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 有一个选项 IsIn 是 RestrictionExtensions 的一部分
x => x.Name.IsIn(new[] {"a", "b"} )
于 2015-05-29T18:00:10.170 回答