2009-03-26 4 views
1

Comment exprimer la requête de critères suivante dans HQL?NHibernate: HQL équivalent des critères Expression.In()?

var idArray = new int[] { 1, 2, 3, 4, 5 }; 

Session.CreateCriteria(typeof(Foo)) 
    .Add(Expression.In("Id", idArray) 
    .List<Foo>(); 

Je suis au courant qu'il ya un « dans » mot-clé dans HQL, mais si je comprends bien ce mot-clé est à utiliser avec les sous-requêtes plutôt que quelque chose comme » ... où Id dans (1, 2, 3, 4, 5) "ou autre. Si ce n'est pas le cas, j'accepterai volontiers les corrections.

Merci/Erik

Répondre

5

Essayez ceci:

var idArray = new int[] { 1, 2, 3, 4, 5 }; 
var foos = Session 
    .CreateQuery("from Foo f where f.Id in (:ids)") 
    .SetParameterList("ids", idArray) 
    .List<Foo>(); 
+0

A travaillé très bien, merci! –

1

Cela fonctionne aussi

ICriteria sc = session.CreateCriteria(typeof(Foo)); 
sc.Add(Restrictions.In("id",new[] { 1, 2 })); 
siteList = sc.List(); 
session.Close(); 
Questions connexes