Из документов :
В настоящее время NHibernate не раскрывает сгруппированный объект, поэтому вы не можете написать group by cat
, если все свойства cat не агрегированы.Вы должны перечислить все неагрегированные свойства явным образом.
В любом случае этот точный запрос может быть выполнен с помощью:
select distinct ftr.ForumThread from ForumThreadRating ftr
Но, конечно, вам, вероятно, нужно sum
или count
что-то, так что вам нужно явно агрегировать свойства.
Обновление: вот как получить топ-10 потоков:
var topThreads = session.CreateQuery(@"
select (select sum(case
when rating.Positive = true then 1
else -1
end)
from ForumThreadRating rating
where rating.ForumThread = thread),
thread
from ForumThread thread
order by 1 desc
")
.SetMaxResults(10)
.List<object[]>()
Как вы можетевидите, этот запрос возвращает список object[]
с двумя элементами каждый: [0]
- это рейтинг, а [1]
- это ForumThread.
Вы можете получить только ForumThreads, используя:
.Select(x => (ForumThread)x[1]);
Или проецировать их в DTO и т. Д.