2011-10-31 39 views
-1

如何設置NHibernate標準來執行此類查詢?如何設置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_LEADSSA_CAMPAIGNS映射。

回答

2

對我來說,我會從我試圖分組的元素開始,所以我會從一個 活動基地開始。我無法從您的查詢中得知,但我會假設您的映射可以從廣告系列轉移到銷售線索。我假設這被稱爲「SALES_LEAD_LIST」

我也喜歡做一個小類來接收投影結果,所以會創建一些東西來保存結果。

public class CAMPAIGN_PERFORMANCE 
{ 
    public CAMPAIGN_PERFORMANCE() {} 

    public int CP_ID {get; set;} 
    public string CP_NAME {get; set;} 
    public int CP_NO_OF_SALES_LEADS {get; set;} 
} 

一旦你有什麼事情把你的投影結果,您可以創建一個標準的標準,只要它推到你新的類通過投影

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>();