2010-08-11 32 views
0

我想修改下面的代碼,這樣它會返回一個Dictionary<int,int>,其中鍵對應groupId和值對應於總的公司在一組,而不是List<Company>如何將NHibernate查詢修改爲像簡單SQL一樣?

companies = _session.CreateCriteria<Company>() 
    .Add<Company>(x => x.CompanyGroupInfo.Id == groupId) 
    .List<Company>(); 

不幸的是,我又不是真正熟悉NHibernate的所有..

這是我應該立足於新的代碼的SQL,因爲這個SQL產生正確的結果:

SELECT 
     [CompanyInfo_GroupId] 
     ,count([Company_Id]) TotalNumberOfCompanies 
FROM 
     [Company] 
     inner join [CompanyInfo] 
      on [CompanyInfo].[CompanyInfo_MSCompanyId] 
       = [Company].[Company_Id] 
where 
     -- I have an array of GroupIds that I get the ids from 
     [CompanyInfo_GroupId] in(963, 1034) 
group by 
     [CompanyInfo_GroupId] 

其中輸出如下表格:

CompanyInfo_GroupId TotalNumberOfCompanies 
------------------- ---------------------- 
963     5 
1034    1 

有人請給我幾點指點?由於

+0

您可以使用標準的API,而不是LINQ – Paco 2010-08-11 19:01:40

回答

1

下面是查詢可能怎麼看在標準...

session.CreateCriteria<Company>() 
    .CreateAlias("CompanyInfo", "cnfo", InnerJoin) 
    .Add(Restrictions.In("cnfo.Group.id", new int[] {963, 1034})) 
    .SetProjection(Projections.ProjectionList() 
     .Add(Projections.GroupProperty("cnfo.Group.id"), "CompanyInfoGroupID") 
     .Add(Projections.RowCount(), "TotalNumberOfCompanies")) 
    .SetResultTransformer(Transformers.AliasToBean<SomeDTO>()) 
    .List<SomeDTO>(); 

... 

public class SomeDTO 
{ 
    public int CompanyInfoGroupID { get; set; } 
    public int TotalNumberOfCompanies { get; set; } 
}