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

Как создать OR для NHibernate?

При создании критериев для 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

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

4b9b3361

Ответ 1

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

И

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

ИЛИ

.Add(
  Expression.Disjunction()
    .Add(criteria)
    .Add(other_criteria)
)

Ответ 2

Используйте 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

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

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

где:

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

Подробнее об этом можно узнать, следуя Документация по интерфейсу Критерии Hibernate, которая совпадает с NHibernate.