Запрос критериев SQL в NHibernate - PullRequest
0 голосов
/ 27 августа 2010

Я использую Sharp Architecture для приложения MVC и пытаюсь сгенерировать запрос критерия nhibernate для следующего SQL:

select top 10 p.* from Tab1 p 
                join Tab2 v on p.Id = v.Tab1Fk
                join Tab3 sbu on v.Id = sbu.Tab2Fk
                where sbu.DateTime >= 12/12/2002 00:00:00
                group by p.Id, p.Name, p.CoCode, p.CuCode, p.StCode, p.ParentFk, p.LastGenerated
                order by COUNT(sbu.Id) desc

В настоящее время у меня есть:

var crit = Session.CreateCriteria<Tab1>();
        crit.SetMaxResults(numberOfRecords);
        crit.CreateCriteria("Tab2", "v", JoinType.InnerJoin)
            .CreateCriteria("Tab3", "sbu", JoinType.InnerJoin)
            .Add(Restrictions.Ge("sbu.DateTime", since))
            .AddOrder(Order.Desc(Projections.Count("sbu.Id")));
        return crit.List<Tab1>();

Но выдает ошибки, кто-нибудь может помочь?

1 Ответ

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

Рассматривали ли вы использование HQL или NHibernate.Linq ? У меня за плечами несколько проектов, и я почти всегда даже не беспокоюсь о критериях api.

const string hql = @"select p.* 
                    from Tab1 p
                    join p.Tab2 v where p.Tab2.Id = v.Id
                    join p.Tab3 sbu where v.Id = sbu.Tab2.Id
                    and sbu.DateTime >= :since
                    and rownum <= 10
                    group by p.Id, p.Name, p.CoCode
                    order by count(sbu.Id) desc";

var list = Session.CreateQuery(hql)
                .SetParameter("since", DateTime.Now /* your date */)
                .List<Tab1>();

Кажется, вы хорошо разбираетесь в SQL, поэтому любой из них может показаться естественным.

Редактировать: Я должен сказать, что я никогда не упорядочивал по количеству (элементу), поэтому мой синтаксис там может быть выключен. :)

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