如何设置NHibernate条件以执行此类查询?

如何设置NHibernate条件以执行此类查询?,nhibernate,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 CN

如何设置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_Lead
SA_CAMPAIGNS
对于我来说,我将从我试图分组的元素开始,因此我将从 运动的基础。我无法从您的查询中判断,但我假设您的映射有一种从活动到销售线索的方式。我假设这被称为“销售线索列表”

我也喜欢创建一个小类来接收投影结果,这样可以创建一些东西来保存结果

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>();
ICriteria-criteria-criteria=base.Session.CreateCriteria(typeof(SA_活动));
criteria.CreateAlias(“销售线索列表”、“销售线索”、JoinType.InnerJoin);
criteria.SetProjection(Projections.ProjectionList()的标准)
.Add(Projections.Property(“ID”),“CP_ID”)
.Add(Projections.Property(“活动名称”),“CP名称”)
.Add(projects.CountDistinct(“SA_LEADS.ID”),“CP_NO_OF_SALES_LEADS”)
.Add(Projections.GroupProperty(“ID”));
.Add(Projections.GroupProperty(“活动名称”));
IList cpProjections=标准
.SETRESULT变压器(
新别名ToBeanResultTransformer(类型(活动性能)))
.List();