2008-12-22 10 views
19

Al crear un criterio para NHibernate, todos los criterios se agregan como AND.Cómo crear declaraciones OR para NHibernate?

Por ejemplo:

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

luego terminar resultado será

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

me gustaría decirle a NHibernate para agregar los criterios como "O"

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

Cualquier ayuda es apreciado

Respuesta

48

Está buscando las clases Conjunction y Disjunction, estas pueden usarse para combinar varias declaraciones para formar instrucciones OR y AND.

Y

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

O

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

Se podría utilizar Restrictions.or, tal que:

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

donde:

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

Usted puede aprender más sobre esto después de la Criteria Interface documentation of Hibernate, lo que es lo mismo que NHibernate.

13

Uso 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); 
Cuestiones relacionadas