我正在尝试通过它的总和命令Linq到NHibernate查询 孩子。
session.Linq<Parent>().OrderBy( p => p.Children.Sum( c => c.SomeNumber ) ).ToList()
这似乎不起作用。在看NHProf时,我可以看到它 由Parent.Id订购。我想也许它正在回归 结果并在SQL之外对它们进行排序,但是如果我添加一个.Skip (1)。对Linq查询采取(1),它仍按Parent.Id。
命令我尝试用内存列表做这个,它只是工作 细
我做错了什么,或者这是Linq的问题 NHibernate的?
我确信我总是可以返回列表,然后执行操作 他们,但这不是一个理想的解决方法,因为我不想 返回所有记录。
答案 0 :(得分:2)
要按聚合值排序查询,您需要按查询分组。在您的示例中,您需要使用带分组的“分组依据”。
equivelant SQL类似于:
select id, sum(child.parentid) as childsum from dbo.Parent
inner join child on
parent.id= child.parentid
group by id
order by childsum desc
如果只有 Linq2NH可以为我们做到这一点......但它不能遗憾。你可以在HQL中做到这一点,只要你能获得id和总和,但不是整个对象。
在我放弃它之前,我和Linq2NH斗争了好几个月。它很慢,不支持二级缓存,只支持非常基本的查询。 (至少在我6个月前放弃它的时候 - 它可能会有突飞猛进!)如果你正在做一个简单的自制应用程序,这很好。如果您的应用程序甚至远程复杂,那么就花一些时间来了解HQL:有点难以理解但更强大。