NHibernate QueryOver с MaxResult, Группировка по и Порядок по - PullRequest
16 голосов
/ 18 апреля 2011

Я пытаюсь преобразовать запрос 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

Есть идеи?

1 Ответ

21 голосов
/ 19 апреля 2011

Вы можете просто повторить проекцию в предложении OrderBy.

Следующий запрос даст вам IList<object[]>, где первый элемент каждого элемента - это идентификатор, а второй - количество.

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