Выберите объект, когда свойство равно Max с NHibernate - PullRequest
11 голосов
/ 10 декабря 2008

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

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"));

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

Ответы [ 3 ]

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

Вы должны быть в состоянии сделать это с проекцией:

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

Как описано Критерии Nhibernate: 'выберите максимум (id) ...'

1 голос
/ 01 декабря 2011

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

0 голосов
/ 19 июля 2012

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

(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>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...