具有MaxResult、Group By和Order By的NHibernate查询版本

具有MaxResult、Group By和Order By的NHibernate查询版本,nhibernate,queryover,Nhibernate,Queryover,我试图将SQL查询转换为NHibernate QueryOver语法,但我不知道如何按计数投影排序 这就是SQL查询的外观: select top 10 v.intVoteUserID, COUNT(v.intVoteUserID) from Group_MessageVotes v where v.dtmVote > :date group by v.intVoteUserID order by COUNT(v.intVoteUserID) desc 有什么想法吗?您可以简单地重复Or

我试图将SQL查询转换为NHibernate QueryOver语法,但我不知道如何按计数投影排序

这就是SQL查询的外观:

select top 10 v.intVoteUserID, COUNT(v.intVoteUserID)
from Group_MessageVotes v
where v.dtmVote > :date
group by v.intVoteUserID
order by COUNT(v.intVoteUserID) desc

有什么想法吗?

您可以简单地重复OrderBy子句中的投影

下面的查询将为您提供一个
IList
,其中每个项目的第一个元素是id,第二个是计数

var result = session.QueryOver<GroupMessageVotes>()
.Select(
    Projections.Group<GroupMessageVotes>(e => e.intVoteUserID),
    Projections.Count<GroupMessageVotes>(e => e.intVoteUserID)
    )
.OrderBy(Projections.Count<GroupMessageVotes>(e => e.intVoteUserID)).Desc
.Take(10)
.List<object[]>();
var result=session.QueryOver()
.选择(
预测组(e=>e.intVoteUserID),
Projections.Count(e=>e.intVoteUserID)
)
.OrderBy(projects.Count(e=>e.intVoteUserID)).Desc
.Take(10)
.List();

所有这些通用参数都是必需的吗?@Stefan Steinegger我认为lambda表达式需要这些参数。可以写
Projections.Count(“intVoteUserID”)
来代替,但我更喜欢第一个选项。应该可以写
Projections.Count(e=>e.intVoteUserID)
@Stefan Steinegger是的,你是对的。有趣的是,我以前没见过。我修正了我的答案来适应。嗯,签名不匹配。它
s
Count(表达式);`而不是
Count(表达式)