Как создать операторы 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

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


person Vinblad    schedule 22.12.2008    source источник


Ответы (3)


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

И

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

ИЛИ

.Add(
  Expression.Disjunction()
    .Add(criteria)
    .Add(other_criteria)
)
person James Gregory    schedule 22.12.2008

Используйте 1_

        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);
person savemaxim    schedule 09.04.2012

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

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

где:

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

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

person Jon Limjap    schedule 22.12.2008