2011-02-01 56 views
2

我有以下查询,帮助与NHibernate标准查询GROUPBY财产

SearchTemplate Template = new SearchTemplate(); 
      Template.Criteria = DetachedCriteria.For(typeof(table1)); 

      Template.Criteria.CreateCriteria("table2", "Usr", NHibernate.SqlCommand.JoinType.InnerJoin) 

       .SetProjection(Projections.ProjectionList() 
       .Add(Projections.Count("Usr.ID"), "UserCount") 
        .Add(Projections.GroupProperty("Location"), "ALocation") 
        .Add(Projections.GroupProperty("Company"), "ACompany") 
        .Add(Projections.GroupProperty("Usr.Designation"), "ADesignation")); 

上述查询给我数据,

Location Company Designation Count 
    Florida  A   Manager  3 
    Florida  A   QA   5 
    Texas  B   Manager  6 
    Texas  B   QA   7 

有没有办法更改查询,以便它给数据,

Location Company Manager QA    
    Florida  A   3  5 
    Texas  B   6  7 

这里经理,QA是可以进入指定领域的唯一可能的值..取而代之的

.Add(Projections.Count("Usr.ID"), "UserCount") 
.Add(Projections.GroupProperty("Usr.Designation"), "ADesignation") 

回答

6

你需要两个突出,每个结果列一个:

.Add(Projections.Sum(Projections.Conditional(
           Restrictions.Eq("Usr.Designation", "Manager"), 
           Projections.Constant(1), 
           Projections.Constant(0))) 
.Add(Projections.Sum(Projections.Conditional(
           Restrictions.Eq("Usr.Designation", "QA"), 
           Projections.Constant(1), 
           Projections.Constant(0))) 
+2

我低头你的知识+1 – Vadim 2011-02-01 20:23:39