2010-03-30 14 views

Respuesta

28

No conozco el estado de nHibernate con respecto a la generación de todas las posibles consultas de LINQ, pero debería poder usar .Contains() para generar una ENTRADA.

var list = new int[] { x, y, x }; 
var q = db.Entities.Where(e => list.Contains(e.AnID)); 
+0

Sí, trabaja con NHibernate 3.1.0 GA –

3

De acuerdo, esto no funciona. Me encontré con el SQL generado por 'no en' ser extraño que (a partir de 3.3.0 GA)

... 
from 
    mytable t0_ 
where 
    case 
    when t0_.testValue in (
       @p0 , @p1 , @p2 
     ) then 1 
      else 0 
    [email protected] 
@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 'caso' esto cuando 'no' habría sido más claro (no es que Planeo leer cada línea, pero tal vez en un rastro/perfil).

(... más tarde ese día ...)

me di cuenta de que la elección anterior 'extraño' de SQL sólo cuando utilicé

.Where(e => list.Contains(e.AnID) == false) 

Si usara

.Where(e => !list.Contains(e.AnID)) 

El SQL generado es mucho más limpio (usando 'no en')

0

NHibernate tiene una opción IsIn parte de RestrictionEx tensiones

x => x.Name.IsIn (nuevo [] { "a", "b"})