Как создавать операторы OR для NHibernate? - PullRequest
22 голосов
/ 22 декабря 2008

При создании критерия для NHibernate все критерии добавляются как AND.

Например:

session.CreateCriteria(typeof(someobject))
.Add(critiera)
.Add(other_criteria)

тогда конечный результат будет

SELECT ...
FROM ...
WHERE criteria **AND** other_criteria

Я бы хотел сказать NHibernate добавить критерии как "ИЛИ"

SELECT ...
FROM ...
 WHERE criteria **OR** other_criteria

Любая помощь приветствуется

Ответы [ 3 ]

52 голосов
/ 22 декабря 2008

Вы ищете классы Conjunction и Disjunction, их можно использовать для объединения различных операторов в операторы OR и AND.

И

.Add(
  Expression.Conjunction()
    .Add(criteria)
    .Add(other_criteria)
)

OR

.Add(
  Expression.Disjunction()
    .Add(criteria)
    .Add(other_criteria)
)
16 голосов
/ 09 апреля 2012

Использование Restrictions.Disjunction()

        var re1 = Restrictions.Eq(prop1, prop_value1);
        var re2 = Restrictions.Eq(prop2, prop_value2);
        var re3 = Restrictions.Eq(prop3, prop_value3);

        var or = Restrictions.Disjunction();
        or.Add(re1).Add(re2).Add(re3);

        criteria.Add(or);
3 голосов
/ 22 декабря 2008

Вы можете использовать Restrictions.or, например:

session.CreateCriteria(typeof(someobject))
    .Add(critiera)
    .Add(other_criteria);

где:

other_criteria = Restrictions.or("property", "value");

Подробнее об этом можно узнать в документации по Criteria Interface для Hibernate , аналогичной NHibernate.

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