Nhibernate HQL在哪里IN查询

时间:2010-03-08 14:28:27

标签: nhibernate hql castle-activerecord

我试图返回查询单个表并使用IN的SimpleQuery列表。 我可以使用

来解决这个问题
return new List<Jobs>(
    ActiveRecordMediator<Jobs>.FindAll(Expression.In("ServiceId", ids))
);

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

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

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

但是我不能让SimpleQuery工作。我找不到任何涉及此文件的文件,并希望那里的人能够提供帮助。

由于

1 个答案:

答案 0 :(得分:23)

查看NHibernate HQL文档here

我猜你的代码是,你在HQL查询之后返回id.列表中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" }));