在nhibernate中使用条件创建查询时出现问题

在nhibernate中使用条件创建查询时出现问题,nhibernate,Nhibernate,我想使用条件重现以下查询: select a.ID as article, count(c.ID) as commentsCount from Comments c left outer join Articles a on a.ID=c.ArticleID where a.ID in (2,10) group by a.ID ICriteria criteria = Session.CreateCriteria<Comment>("c")

我想使用条件重现以下查询:

select a.ID as article, count(c.ID) as commentsCount
from Comments c 
left outer join Articles a on a.ID=c.ArticleID 
where a.ID in (2,10)
group by a.ID
ICriteria criteria = Session.CreateCriteria<Comment>("c")  
                .CreateCriteria("Article", "a", 
                                NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                .Add(Restrictions.In("a.ID", articleIDs))
                .SetProjection(Projections.Property("a.ID"))
                .SetProjection(Projections.Count("c.ID"))
                .SetProjection(Projections.GroupProperty("a.ID"));
SELECT   a1_.ID as y0_
FROM     Comments this_
         left outer join Articles a1_
           on this_.ArticleID = a1_.ID
WHERE    a1_.ID in (2 /* @p0 */,10 /* @p1 */)
GROUP BY a1_.ID
我写的,但在某个地方我一定有一个错误,因为结果与我预期的不同

标准如下:

select a.ID as article, count(c.ID) as commentsCount
from Comments c 
left outer join Articles a on a.ID=c.ArticleID 
where a.ID in (2,10)
group by a.ID
ICriteria criteria = Session.CreateCriteria<Comment>("c")  
                .CreateCriteria("Article", "a", 
                                NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                .Add(Restrictions.In("a.ID", articleIDs))
                .SetProjection(Projections.Property("a.ID"))
                .SetProjection(Projections.Count("c.ID"))
                .SetProjection(Projections.GroupProperty("a.ID"));
SELECT   a1_.ID as y0_
FROM     Comments this_
         left outer join Articles a1_
           on this_.ArticleID = a1_.ID
WHERE    a1_.ID in (2 /* @p0 */,10 /* @p1 */)
GROUP BY a1_.ID
以及映射:

public class Comment : EntityBase<int>
{
        public virtual Article Article { set; get; }

}

public CommentMap()
        {
            Id(x => x.ID).GeneratedBy.Identity();        
            References(x => x.Article).Not.Nullable()
                                      .LazyLoad().Cascade
                                      .SaveUpdate().Column("ArticleID");
        }
公共类注释:EntityBase
{
公共虚拟项目{set;get;}
}
公共地图()
{
Id(x=>x.Id).GeneratedBy.Identity();
引用(x=>x.Article).Not.Nullable()
.LazyLoad().Cascade
.SaveUpdate().Column(“ArticleID”);
}

每次使用
SetProjection
都会替换上一个

您需要使用:

.SetProjection(Projections.Property("a.ID"),
               Projections.Count("c.ID"),
               Projections.GroupProperty("a.ID"))

每次使用
SetProjection
都会替换上一个

您需要使用:

.SetProjection(Projections.Property("a.ID"),
               Projections.Count("c.ID"),
               Projections.GroupProperty("a.ID"))