Подтвердить что ты не робот

Nhibernate HQL, где запрос IN

Im пытается вернуть список SimpleQuery, который запрашивает одну таблицу и использует IN. Я могу заставить это работать, используя

return new List<Jobs>(
    ActiveRecordMediator<Jobs>.FindAll(Expression.In("ServiceId", ids))
);

Однако это действительно очень медленно. Так что id хотел бы сделать что-то вроде этого

SimpleQuery<Job> query = 
    new SimpleQuery<Job>(@"from Job as j where ? in (j.ServiceId)", ids);

return new List<Job>(query.Execute());

Однако я не могу заставить SimpleQuery работать. Я не могу найти документацию, охватывающую это, и надеялся, что кто-то там сможет помочь.

Спасибо

4b9b3361

Ответ 1

Взгляните на документацию NHibernate HQL здесь.

Я угадываю из вашего кода, что вы после запроса HQL возвращаете все задания, где job.ServiceID в списке идентификаторов.

Может быть, что-то по строкам,

IQuery q = s.CreateQuery("from Job as j where j.ServiceId in (:serviceIds)");
q.SetParameterList("serviceIds", ids); 

Кстати, вы слышали о проекте NHibernate Lambda Extensions? Ниже приведен пример запроса IN, выполненного с использованием указанной библиотеки. Может быть интересно посмотреть на альтернативу использованию HQL.

DetachedCriteria after =
    DetachedCriteria.For<Person>()
        .Add(SqlExpression.In<Person>(p => p.Name, 
          new string[] { "name1", "name2", "name3" }));