Est-il possible d'obtenir Nhibernate linq pour générer une requête avec une clause "In"? par exemple. - Where AnID in (x,y,z)
?Nhibernate Linq In Clause
20
A
Répondre
28
Je ne connais pas l'état de nHibernate en ce qui concerne la génération de toutes les requêtes LINQ potentielles, mais vous devriez pouvoir utiliser .Contains()
pour générer un IN.
var list = new int[] { x, y, x };
var q = db.Entities.Where(e => list.Contains(e.AnID));
3
D'accord, cela fonctionne. J'ai trouvé le SQL généré pour « pas » être étrange que (comme 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)],
...
semble un peu étrange de « cas » quand « non » aurait été plus clair (pas Je prévois de lire chaque ligne, mais dans une trace/profil peut-être).
(... plus tard ce jour-là ...)
Je réalise que le choix ci-dessus 'étrange' de SQL est que lorsque je
.Where(e => list.Contains(e.AnID) == false)
Si je
.Where(e => !list.Contains(e.AnID))
Le SQL généré est beaucoup plus propre (en utilisant « non »)
0
NHibernate a une option Isín partie de RestrictionEx tensions
x => x.Name.IsIn (nouveau [] { "a", "b"})
Eh oui, travaille avec NHibernate 3.1.0 GA –