如何在NHibernate中执行ORDER BY表达式排序

时间:2010-09-29 06:56:07

标签: nhibernate

select p.Id, sum(inc.Quantity) 
from Products p join Incomes inc
group by p.Id 
order by sum(inc.Quantity) >0

此查询在ORDER BY子句中提供NHibernate.Hql.Ast.ANTLR.QuerySyntaxException。我想知道是否有可能克服这个错误并通过某种表达式进行排序?

更新
我需要按名称,价格等对产品列表进行排序。产品数量== 0必须到列表的底部(无论名称,价格如何)。此外,我需要执行该列表的分页。

3 个答案:

答案 0 :(得分:1)

您还需要SQL支持的语法。这有效:

select p.Id, sum(inc.Quantity) 
from Products p join p.Incomes inc
group by p.Id 
order by case when sum(inc.Quantity) > 0 then 0 else 1 end

挑剔:为什么你的实体有多个名字?

答案 1 :(得分:0)

因为我已经完成了任何NHibernate,但是我希望你至少想要删除排序的> 0位:

order by sum(inc.Quantity)

或者可能使用别名:

select p.Id, sum(inc.Quantity) totalQuantity
from Products p join Incomes inc
group by p.Id 
order by totalQuantity

我不知道这是否有用,但值得一试:)

答案 2 :(得分:0)

尝试

select p.Id, sum(inc.Quantity) 
from Products p join Incomes inc
group by p.Id 
having sum(inc.Quantity) > 0
order by sum(inc.Quantity)

Order by用于排序。要过滤聚合字段,请使用。

请参阅http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-grouping