NHibernate HQL中的where IN查询

12

我试图返回一个查询单个表并使用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个回答

25

请查看NHibernate HQL文档这里

从您的代码来看,我猜您想要一个HQL查询,以返回所有具有服务ID在ID列表中的作业。

也许可以尝试以下内容:

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" }));

谢谢您的回复。根据您的回复,我编辑了我的查询:SimpleQuery<Job> query = new SimpleQuery<Job>( @"from Job as j where j.SecondName = (:name) and ServiceId in (:serviceIds)"); query.SetParameter("serviceIds", ids); query.SetParameter("name", name); return new List<Job>(query.Execute());现在唯一的问题是我传递的ids整数数组。数据库中的字段类型为int,如果我在任何字符串字段上使用IN,它都可以正常工作,如果我传递单个int值,它也可以正常工作。如何传递一个数组?谢谢 - Gilbert
这也可能对您有用 http://www.nhforge.org/doc/nh/en/index.html#manipulatingdata-queryinterface - Noel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接