Nhibernate Linq在条款

问题描述:

是否有可能得到Nhibernate linq生成一个带“In”子句的查询?例如 - Where AnID in (x,y,z)Nhibernate Linq在条款

我不知道nHibernate在生成所有潜在的LINQ查询方面的状态,但是您应该可以使用.Contains()来生成IN。

var list = new int[] { x, y, x }; 
var q = db.Entities.Where(e => list.Contains(e.AnID)); 
+0

烨,工作与NHibernate 3.1.0 GA – 2011-03-09 18:59:54

同意,这是行不通的。我发现生成的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”})