2010-03-30 6 views

cevap

28

Tüm olası LINQ sorgularını oluşturma konusunda nHibernate durumunu bilmiyorum, ancak IN oluşturmak için .Contains() kullanabilmeniz gerekir.

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

Evet, NHibernate 3.1.0 GA ile çalışır –

3

Anlaşıldı, bu işe yarıyor. Ben değil ('değil de' 'değil' net olurdu ne zaman

... 
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)], 
... 

bu 'durum' olarak biraz tuhaf görünüyor (GA 3.3.0 itibariyle) olsa garip olabilmesi için oluşturulan SQL bulundu Her satırı okumayı planlıyorum, ancak bir iz/profilde belki). Ben

.Where(e => !list.Contains(e.AnID)) 
kullandıysanız

(... sonra o gün ...)

Ben SQL yukarıdaki 'garip' bir seçim ben

.Where(e => list.Contains(e.AnID) == false) 

kullanılan tek zaman olduğunu fark etti

Oluşturulan SQL çok daha temizdir ('içinde değil')

0

NHibernate, RestrictionEx'in bir parçası IsIn seçeneğine sahiptir. gerilimler

x => x.Name.IsIn (yeni [] { "a", "b"})