Nhibernate Linq在条款
答
我不知道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
[email protected]
@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是RestrictionEx的一部分紧张
X => x.Name.IsIn(新[] { “一”, “B”})
烨,工作与NHibernate 3.1.0 GA – 2011-03-09 18:59:54