Как изменить запрос NHibernate, чтобы он вел себя как простой SQL? - PullRequest
0 голосов
/ 11 августа 2010

Я пытаюсь изменить следующий код, чтобы он возвращал Dictionary<int,int>, где ключи соответствуют groupId, а значения соответствуют общему количеству компаний в группе вместо List<Company>

* 1004.*

К сожалению, я совсем не знаком с 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

Может кто-нибудь дать мне несколько советов?Спасибо

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Вот как может выглядеть этот запрос в критериях ...

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; }
}
1 голос
/ 11 августа 2010

Я думаю, вам стоит взглянуть на Прогнозы, агрегирование и группировка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...