2009-07-22 11 views
8

Comencé a familiarizarme con NHibernate. Estoy tratando de realizar una consulta que selecciona todos los registros de una tabla, pero con una lista de filtros de exclusión de ID, por ej. consígueme todos los productos excepto estos con estos valores de ID.NHibernate - Implementar la consulta "NOT IN" utilizando ICriteria

Normalmente, en T-SQL directo, paso los ID para excluirlos en una cláusula NOT IN como tal.

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

¿Cómo se hace esto en NHibernate usando ICriteria o HQL (pero preferiblemente ICriteria)?

Respuesta

23

Trate

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

impresionante, que funcionó a la perfección, gracias. Aquí está el código completo que terminé implementando ... query.Add (Expression.Not (Expression.In ("ProductType.Id", excludedProductTypeIds.ToArray()))); Vi los métodos 'No' y 'En', pero no pensé en encadenarlos así. –

+0

Sí, puede hacer lo mismo con los comandos OR y AND. –

+0

Una nota al margen, no estoy seguro de cómo otros dialectos/motores SQL funcionan juntos, pero SQL Server tiene un límite de parámetro de consulta de 2100 elementos, NHibernate rellena sus declaraciones IN con parámetros y fallará si tus excluidosProductTypeIds excede 2100. –

Cuestiones relacionadas