Nhibernate 在HQL中有条件地计数元素

Nhibernate 在HQL中有条件地计数元素,nhibernate,hql,Nhibernate,Hql,我有一个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的文档 我似乎在如何做这件事上有一个思想障碍。我正在使用N

我有一个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 query

更新:以下是完全正确的查询:

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

IIRC,类似的方法应该可以工作(其中d是Documents集合的别名):


你是说??请不要批准包含剽窃内容的维基编辑。是一个逐字复制+粘贴从-弹出的,如果你想讨论
sum(case when d.Trashed = false then 1 else 0 end) as Count