我有一个NHibernate查询,如下所示:
var query = Session.CreateQuery(@"
select o
from Order o
left join o.Products p
where
(o.CompanyId = :companyId) AND
(p.Status = :processing)
order by o.UpdatedOn desc")
.SetParameter("companyId", companyId)
.SetParameter("processing", Status.Processing)
.SetResultTransformer(Transformers.DistinctRootEntity);
var data = query.List<Order>();
我想为此查询实现分页,因此我只返回x行而不是整个结果集。
我知道SetMaxResults()
和SetFirstResult()
,但由于left join
和DistinctRootEntity
,可能会返回少于x个订单。
我也尝试了"select distinct o"
,但是为此生成的sql(使用sqlserver 2008方言)似乎忽略了第一个之后页面的distinct
(我认为{{3}是问题)。
实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
在这些情况下,最好在两个查询中进行,而不是一个:
in
运算符答案 1 :(得分:1)
使用SetResultTransformer(Transformers.AliasToBean())并获取不是实体的数据。
另一种解决方案是您更改查询。 正如我所看到的那样,您正在退回有正在处理的产品的订单。 所以你可以使用exists语句。检查13.11的nhibernate手册。子查询。