NHibernate: HQL эквивалент Criteria Expression.In ()? - PullRequest
1 голос
/ 26 марта 2009

Как бы вы выразили следующий запрос Criteria на HQL?

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

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

Мне известно, что в HQL есть ключевое слово "in", но, насколько я понимаю, это ключевое слово для использования с подзапросами, а не чем-то вроде "... где Id в (1, 2, 3, 4 5) "или такой. Если это не так, я с удовольствием приму исправления.

Спасибо / Эрик

Ответы [ 2 ]

5 голосов
/ 26 марта 2009

Попробуйте это:

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>();
1 голос
/ 09 февраля 2011

Это тоже работает

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