Как настроить критерии NHibernate для выполнения такого запроса? - PullRequest
0 голосов
/ 31 октября 2011

Как настроить критерии NHibernate для выполнения такого запроса?

SELECT
    COUNT(1) AS CNT, 
    l.CAMPAIGN_ID AS CAMPAIGN_ID,
    MAX(mc.NAME) AS CAMPAIGN_NAME
FROM
    SA_LEADS l
INNER JOIN
    SA_CAMPAIGNS mc
ON
    l.CAMPAIGN_ID = mc.ID
GROUP BY
    CAMPAIGN_SOURCED_ID
ORDER BY 
    CNT DESC

У меня есть сопоставления для обеих таблиц SA_LEADS и SA_CAMPAIGNS.

1 Ответ

2 голосов
/ 31 октября 2011

Для меня я бы начал с элемента, который я пытаюсь сгруппировать, поэтому я бы начал с базы кампании.Я не могу сказать по вашему запросу, но я бы предположил, что ваши сопоставления могут перейти от кампании к лидеру продаж.Я предположил, что это называется «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>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...