2009-07-22 11 views
8

Ho iniziato a fare i conti con NHibernate. Sto cercando di eseguire una query che seleziona tutti i record da una tabella ma con un elenco di filtri di esclusione di ID, ad es. prendermi tutti i prodotti tranne quelli con questi valori di ID.NHibernate - Implementare la query "NOT IN" utilizzando ICriteria

Normalmente in T-SQL diretto passerei gli ID da escludere in una clausola NOT IN in questo modo.

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

Come faccio a fare questo in NHibernate utilizzando ICriteria o HQL (ma preferibilmente ICriteria)?

risposta

23

Prova

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

impressionante, che ha funzionato perfettamente, grazie. Ecco il codice completo che ho finito per implementare ... query.Add (Expression.Not (Expression.In ("ProductType.Id", excludedProductTypeIds.ToArray()))); Ho visto i metodi "Not" e "In", ma non ho pensato di incatenarli in quel modo. –

+0

Sì, puoi fare la stessa cosa con i comandi OR e AND. –

+0

Una nota a margine, non è sicuro di come altri dialetti/motori SQL funzionano insieme, ma SQL Server ha un limite del parametro di ricerca di 2100 elementi, NHibernate compila le sue istruzioni IN con i parametri e avrà esito negativo se iIl'IDProdottoDati esclusi supera 2100. –

Problemi correlati