2008-12-22 13 views
19

Beim Erstellen eines Kriteriums für NHibernate werden alle Kriterien als AND hinzugefügt.Wie OR-Anweisungen für NHibernate erstellen?

Zum Beispiel:

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

dann endet Ergebnis

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

sein ich NHibernate sagen, möchte die Kriterien als "OR"

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

Jede Hilfe hinzuzufügen ist geschätzt

Antwort

48

Sie suchen nach den Klassen Conjunction und Disjunction, diese können verwendet werden, um verschiedene Anweisungen zu kombinieren, um OR- und AND-Anweisungen zu bilden.

UND

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

ODER

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

Sie könnten Restrictions.or verwenden, so dass:

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

wo:

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

Sie mehr dazu im Anschluss an die Criteria Interface documentation of Hibernate lernen kann, die die gleiche wie NHibernate ist.

13

Verwenden 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); 
Verwandte Themen