2009-07-22 6 views
8

J'ai commencé à m'habituer à NHibernate. J'essaie d'effectuer une requête qui sélectionne tous les enregistrements d'une table mais avec une liste de filtres d'exclusion d'ID, par exemple. Obtenez-moi tous les produits sauf ceux-ci avec ces valeurs d'identification.NHibernate - Implémenter la requête "NOT IN" en utilisant ICriteria

Normalement en T-SQL direct, je passerais les ID à exclure dans une clause NOT IN comme ça.

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

Comment puis-je faire cela en utilisant NHibernate ICriteria ou HQL (mais de préférence ICriteria)?

Répondre

23

Essayez

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

impressionnant, qui a fonctionné parfaitement, merci. Voici le code complet que j'ai fini par implémenter ... query.Add (Expression.Not (Expression.In ("ProductType.Id", excludedProductTypeIds.ToArray()))); J'ai vu les méthodes 'Non' et 'In', mais je n'ai pas pensé à les enchaîner comme ça. –

+0

Yup, vous pouvez faire la même chose avec les commandes OR et AND. –

+0

Une note de côté, pas sûr comment les autres dialectes/moteurs SQL travaillent ensemble, mais SQL Server a une limite de paramètre de requête de 2100 éléments, NHibernate remplit ses instructions IN avec des paramètres et échouera si votre excludedProductTypeIds dépasse 2100. –

Questions connexes