Подсчитать элементы условно в HQL - PullRequest
0 голосов
/ 01 марта 2011

У меня есть HQL-запрос, который возвращает проекции объекта, включая количество определенных дочерних коллекций.

select t.Id as TagId, t.Name as Name, count(elements(t.Documents)) as Count 
from Tag t
group by t.Id, t.Name, t.User
having t.User.Id = :userId"

Это работает, за исключением того, что мне нужно поставить условие на счет. Я только хочу посчитать Документы, где Trashed = false для документа.

Кажется, у меня есть умственный блок, как это сделать. Я использую NHibernate 3.0. Я был бы одинаково счастлив с запросом ICriteria или Linq.

ОБНОВЛЕНИЕ : Вот полностью правильный запрос:

select t.Id as TagId, t.Name as Name, sum(case when d.Trashed = false then 1 else 0 end) as Count 
from Tag t
left join t.Documents d
group by t.Id, t.Name, t.User
having t.User.Id = :userId and sum(case when d.Trashed = false then 1 else 0 end) > 0

1 Ответ

3 голосов
/ 01 марта 2011

IIRC, что-то вроде этого должно работать (где d - псевдоним к коллекции документов):

sum(case when d.Trashed = false then 1 else 0 end) as Count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...