gpt4 book ai didi

Linq-to-NHibernate OrderBy 不工​​作

转载 作者:行者123 更新时间:2023-12-02 02:36:08 24 4
gpt4 key购买 nike

我正在尝试通过它的总和来对 Linq to NHibernate 查询进行排序 children 。

session.Linq<Parent>().OrderBy( p => p.Children.Sum( c => c.SomeNumber ) ).ToList()

这似乎行不通。在查看 NHProf 时,我可以看到它按 Parent.Id 排序。我想也许它正在返回结果并在 SQL 之外对其进行排序,但是如果我添加 .Skip( 1 ).Take( 1 ) 到 Linq 查询,它仍然按 Parent.Id 排序。

我试着用一个内存列表来做这件事,它只是工作很好。

我是不是做错了什么,或者这是 Linq 的问题N 休眠?

我确定我总是可以返回列表,然后对他们,但这不是一个理想的解决方法,因为我不想返回所有记录。

最佳答案

要按聚合值对查询进行排序,您需要使用分组查询。在您的示例中,您需要使用带有联接的“分组依据”。

等效的 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:有点难理解但功能更强大。

关于Linq-to-NHibernate OrderBy 不工​​作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1669747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com