nhibernatequeryover

NHibernate QueryOver with MaxResult, Group By and Order By


I'm trying to convert a SQL query to NHibernate QueryOver syntax, but I don't understand how to sort by the count projection.

This is what the SQL Query looks like:

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

Any ideas?


Solution

  • You can simply repeat the projection in the OrderBy-clause.

    The following query will give you an IList<object[]> where the first element of each item is the id and the second is the count.

    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[]>();