Подтвердить что ты не робот

Выберите объект, если свойство равно Max с NHibernate

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

var deatched = DetachedCriteria.For<Enquiry>("e2")
   .SetProjection(Projections.Alias(Projections.Max("Property"), "maxProperty"))
   .Add(Restrictions.EqProperty("e2.EnquiryCode", "e.EnquiryCode"));

session.CreateCriteria(typeof(Enquiry), "e")
   .Add(Subqueries.PropertyEq("Property", deatched))
   .AddOrder(Order.Asc("EnquiryCode"));

Мой вопрос: это лучший способ? Может ли кто-нибудь предложить лучший способ?

4b9b3361

Ответ 1

Для агрегаций лучше использовать SQL, а не HQL.Use Nhibernate только для основных объектов и их отношений (очень удобный дизайн). Хранимые процедуры - лучшее место для этих агрегаций и функций, потому что они зависят от данных, а не зависят от объектов

Ответ 2

Вы должны иметь возможность сделать это с помощью проекции:

session.CreateCriteria(typeof(Customer))
  .SetProjection( Projections.Max("Id") )
  .UniqueResult();

Как описано Nhibernate Criteria: 'select max (id)...'

Ответ 3

Я думаю, что это должно работать:

(from e in NHibernateSession().Query<Enquiry>()
    where e.Property == (
    (
        from e2 NHibernateSession().Query<Enquiry>()
        where e2.EnqueryCode == e.EnquiryCode
        select e2.Property).Max()
    )
    select e
).ToList<Enquiry>()