Nhibernate HQL在哪里IN查询

Gil*_*ert 12 nhibernate castle-activerecord hql

我试图返回一个查询单个表并使用IN的SimpleQuery列表.我可以使用它来工作

return new List<Jobs>(
    ActiveRecordMediator<Jobs>.FindAll(Expression.In("ServiceId", ids))
);
Run Code Online (Sandbox Code Playgroud)

然而,这真的非常慢.所以我喜欢做这样的事情

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

return new List<Job>(query.Execute());
Run Code Online (Sandbox Code Playgroud)

但是我无法使SimpleQuery工作.我找不到任何涉及此文件的文件,并希望有人能够提供帮助.

谢谢

Noe*_*oel 25

这里查看NHibernate HQL文档.

我猜测你的代码,你是在HQL查询之后返回所有在id列表中job.ServiceID的作业.

也许有些事情,

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

顺便说一下,您听说过NHibernate Lambda Extensions项目吗?下面是使用上述库完成的IN查询的示例.作为使用HQL的替代方案,可能会有一些有趣的东西.

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

  • Opps,错误的方法调用尝试使用q.SetParameterList代替 (2认同)