Для меня я бы начал с элемента, который я пытаюсь сгруппировать, поэтому я бы начал с базы кампании.Я не могу сказать по вашему запросу, но я бы предположил, что ваши сопоставления могут перейти от кампании к лидеру продаж.Я предположил, что это называется «SALES_LEAD_LIST»
Я также хотел бы создать небольшой класс для получения результата проецирования, чтобы создать что-то для хранения результата.чтобы поместить свой результат прогноза, вы можете создать стандартные критерии и просто вставить его в свой новый класс с помощью проекции
ICriteria criteria = base.Session.CreateCriteria(typeof(SA_CAMPAIGNS));
criteria.CreateAlias("SALES_LEADS_LIST", "SA_LEADS", JoinType.InnerJoin);
criteria.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("ID"), "CP_ID")
.Add(Projections.Property("CAMPAIGN_NAME"), "CP_NAME")
.Add(Projections.CountDistinct("SA_LEADS.ID"), "CP_NO_OF_SALES_LEADS")
.Add(Projections.GroupProperty("ID"));
.Add(Projections.GroupProperty("CAMPAIGN_NAME")));
IList<CAMPAIGN_PERFORMANCE> cpProjections = criteria
.SetResultTransformer(
new AliasToBeanResultTransformer(typeof(CAMPAIGN_PERFORMANCE)))
.List<CAMPAIGN_PERFORMANCE>();