2009-07-22 17 views
8

'u kullanarak "NOT IN" sorgusunu uygulayın NHibernate ile kavrama yapmaya başladım. Tablodaki tüm kayıtları seçen, ancak ID'lerin hariç tutma filtresi listesine sahip bir sorgu gerçekleştirmeye çalışıyorum. Tüm bu ürünleri, bu kimlik değerlerine sahip olanlar hariç.NHibernate - ICriteria

Normalde doğrudan T-SQL'de, böyle bir NOT IN cümleciğine dahil edilmek için ID'leri geçebilirdim. Ben kullanarak NHibernate bunu nasıl

SELECT * 
FROM Products 
WHERE ProductId NOT IN (1,5,9,23,45) 

ya ICriteria veya HQL (fakat tercihen ICriteria)?

cevap

23

, mükemmel sayesinde çalıştı,

.Add(Expression.Not(Expression.In("ProductID", new int[] { 1, 5, 9, 23, 45 }))) 
+0

Müthiş deneyin. İşte tamamlandı kod tamamlandı ... query.Add (Expression.Not (Expression.In ("ProductType.Id", excludedProductTypeIds.ToArray()))); 'Not' ve 'In' yöntemlerini gördüm, ancak onları böyle zincirlemeyi düşünmedim. –

+0

Yup, aynı şeyi OR ve AND komutlarıyla da yapabilirsiniz. –

+0

Bir yan not, diğer SQL lehçelerinin/motorlarının birlikte çalıştığından emin değil, ancak SQL Server 2100 öğenin bir sorgu parametre sınırına sahip, NHibernate IN deyimlerini parametrelerle doldurur ve excludedProductTypeIds 2100'ü aşarsa başarısız olur. –