Nhibernate HQL where IN 查询

标签 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 工作。我找不到任何涵盖此内容的文档,并希望有人能够提供帮助。

谢谢

最佳答案

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

关于Nhibernate HQL where IN 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2401950/

相关文章:

c# - NHibernate 映射到另一个不在 ID 上的对象

c# - 我可以在 C# 中告诉 ActiveRecord 类的表名吗?

c# - 表达式树 - 不必要的转换为 int32

unit-testing - 你如何从 Rhino.Commons 模拟 UnitOfWork?

java - hibernate HQL 中的 "where exists"

java - HQL 中的 Linq ".any"等价物

java - 如何编写多行HQL代码?

c# - 关于如何从域(ORM)对象映射到数据传输对象(DTO)的建议

c# - 如何在请求子类时阻止 Automapper 映射到父类

c# - NHibernate 和 AutoMapper 不能正常运行 : "a different object with the same identifier value was already"