Подсчет в спящем режиме с использованием критериев без лишних внутренних объединений - PullRequest
0 голосов
/ 23 февраля 2011

Я использую критерии для подсчета количества строк. рассмотрим класс

class GroupMembership{
 public Group  Group{get;set;}
 public Member Member{get;set;}

}

У меня есть критерий, который выбирает отдельных членов для каждой группы как:

DetachedCriteria.For<GroupMembership>("this")
.CreateCriteria("Group", "grp")
.CreateAlias("this.CommunityMember", "CommunityMember")
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("this.Group.Id"),"GroupId") 
.Add(Projections.CountDistinct("this.CommunityMember.Id"), "TotalMembers"))

Есть ли способ, которым я могу считать, не выполняя внутреннее соединение с CommunityMember.

UPDATE: Я добавляю SQL, сгенерированные из запроса

SELECT   this_.GroupId                                  as y0_,
         count(distinct communitym2_.CommunityMemberId) as y1_
FROM     [GroupMembership] this_
         inner join [CommunityMember] communitym2_
           on this_.CommunityMemberId = communitym2_.CommunityMemberId
         inner join [Group] grp1_
           on this_.GroupId = grp1_.GroupId
GROUP BY this_.GroupId

Как видите, мы можем легко избежать внутреннего объединения в SQL. У меня вопрос, можно ли сделать то же самое в критериях.

1 Ответ

1 голос
/ 23 февраля 2011

Как насчет ...

DetachedCriteria.For<GroupMembership>()
                .SetProjection(Projections.ProjectionList()
                    .Add(Projections.GroupProperty("Group"))
                    .Add(Projections.CountDistinct("CommunityMember")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...