query - Nhibernate Linq En Cláusula
nhibernate sql query string (3)
De acuerdo, esto funciona. Encontré que el SQL generado para ''no está'' es extraño (a partir de 3.3.0 GA)
...
from
mytable t0_
where
case
when t0_.testValue in (
@p0 , @p1 , @p2
) then 1
else 0
end=@p3
@p0 = 9 [Type: Int32 (0)],
@p1 = 99 [Type: Int32 (0)],
@p2 = 109 [Type: Int32 (0)],
@p3 = False [Type: Boolean (0)],
...
Parece un poco extraño que "en caso de" esto cuando "no en" hubiera sido más claro (no es que planee leer cada línea, pero quizás en una traza / perfil).
(... más tarde ese día ...)
Me di cuenta de que la anterior opción "extraña" de SQL era solo cuando la usaba
.Where(e => list.Contains(e.AnID) == false)
Si yo use
.Where(e => !list.Contains(e.AnID))
El SQL generado es mucho más limpio (usando ''no en'')
¿Es posible obtener que Nhibernate linq genere una consulta con una cláusula "In"? Por ejemplo, Where AnID in (x,y,z)
?
NHibernate tiene una opción IsIn parte de RestrictionExtensions
x => x.Name.IsIn (nuevo [] {"a", "b"})
No conozco el estado de nHibernar con respecto a la generación de todas las posibles consultas de LINQ, pero debería poder usar .Contains()
para generar una IN.
var list = new int[] { x, y, x };
var q = db.Entities.Where( e => list.Contains( e.AnID ) );