【发布时间】:2010-03-30 16:34:53
【问题描述】:
是否可以让 Nhibernate linq 生成带有“In”子句的查询?例如- Where AnID in (x,y,z)?
【问题讨论】:
标签: linq nhibernate linq-to-nhibernate
是否可以让 Nhibernate linq 生成带有“In”子句的查询?例如- Where AnID in (x,y,z)?
【问题讨论】:
标签: linq nhibernate linq-to-nhibernate
我不知道 nHibernate 在生成所有潜在 LINQ 查询方面的状态,但您应该能够使用 .Contains() 生成 IN。
var list = new int[] { x, y, x };
var q = db.Entities.Where( e => list.Contains( e.AnID ) );
【讨论】:
同意,这确实有效。我发现为“不在”生成的 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')
【讨论】:
NHibernate 有一个选项 IsIn 部分的 RestrictionExtensions
x => x.Name.IsIn(new[] {"a", "b"} )
【讨论】: