2010-03-30 84 views

回答

28

我不知道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

3

同意,這是行不通的。我發現生成的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')

0

NHibernate有一個選項IsIn是RestrictionEx的一部分緊張

X => x.Name.IsIn(新[] { 「一」, 「B」})