NHibernate Проекции и предложение «Имея» - PullRequest
5 голосов
/ 12 марта 2009

Я использую NHibernate для запроса к моей базе данных с помощью API критериев. Мои критерии ниже:

ICriteria c = Session.CreateCriteria(typeof(Transaction));

ProjectionList projections = Projections.ProjectionList();
projections.Add(Projections.Sum("Units"), "Units");
projections.Add(Projections.GroupProperty("Account"), "Account");
projections.Add(Projections.GroupProperty("Security"), "Security");
c.SetProjection(projections);

Это работает нормально, но мне бы хотелось, чтобы был возможность ограничить запрос только возвратом, когда свойство Units> 0. В SQL я просто использовал бы предложение Having Units > 0, однако Не удалось найти способ сделать это в NHibernate. У кого-нибудь есть идеи или я могу использовать только HQL?

Ответы [ 2 ]

5 голосов
/ 12 марта 2009

Вы можете получить доступ к ProjectionCriteria из объекта Criteria.

...
c.SetProjection(projections)
.ProjectionCriteria
.Add(Restrictions.Ge("Units", 0));

РЕДАКТИРОВАТЬ: Это решение в настоящее время не работает, однако оно должно работать в NHibernate 2.1.0

3 голосов
/ 21 сентября 2010

Для тех, кто заходит сюда с подобной проблемой, я просто решил ее следующим образом:

IProjection howMany = Projections.Count("Id").As("HowMany");

ICriteria criteria = session
    .CreateCriteria<L10N>()
    .SetProjection(
        howMany,
        Projections.GroupProperty("Native"),
        Projections.GroupProperty("Locale")
    );

criteria.Add(Restrictions.Gt(howMany,1));
...