sqlquery query linq nhibernate linq-to-nhibernate

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 ) );