作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过它的总和来对 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/
我是一名优秀的程序员,十分优秀!