2009-07-22 10 views
8

Zacząłem radzić sobie z NHibernate. Próbuję wykonać kwerendę, która wybiera wszystkie rekordy z tabeli, ale z listy filtrów wykluczających identyfikatorów, np. zdobądź wszystkie produkty oprócz tych o tych wartościach ID.NHibernate - Zaimplementuj zapytanie "NOT IN" za pomocą ICriteria

Zwykle w bezpośrednim T-SQL przekazywałbym identyfikatory, które miałyby być wykluczone do klauzuli NOT IN, tak jak.

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

Jak zrobić to w NHibernate za pomocą ICriteria lub HQL (ale najlepiej ICriteria)?

Odpowiedz

23

Spróbuj

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

Awesome, że pracował idealnie, dzięki. Oto pełny kod I zakończył się realizacji ... query.Add (Expression.Not (Expression.In ("ProductType.Id", excludedProductTypeIds.ToArray()))); Widziałem metody "Nie" i "W", ale nie myślałem, żeby je tak łańcuchować. –

+0

Tak, możesz zrobić to samo z poleceniami LUB i ORAZ. –

+0

Nota boczna, nie wiem, jak inne dialekty/silniki SQL współpracują ze sobą, ale SQL Server ma limit parametrów zapytania wynoszący 2100 pozycji, NHibernate zapełnia swoje instrukcje IN parametrami i nie powiedzie się, jeśli Twój excludedProductTypeIds przekroczy 2100. –

Powiązane problemy