2009-08-14 7 views
1

Comment puis-je créer une disjonction dans NHibernate qui accomplirait l'instruction SQL suivante:Restrictions.Disjunction() entre l'état d'une condition ET b OU condition c ET état d

Select * from MyTable
Où (conditionA = true eT conditionB = true)
OU (conditionC = true eT conditionD = true)

D'après ce que j'ai vu, le Disjuntion() prend un seul et "critères" les ORs ensemble. Est-il possible de grouper au critère ensemble et "OU" il contre un autre couple de critère?

J'espère que cette question est assez claire.

Merci!

Répondre

6

Ce n'est pas exactement jolie mais vous écrirait comme ceci:

.Add(
    Restrictions.Or(
     Restrictions.Conjunction().Add(Restrictions.Eq("columnA", true)).Add(Restrictions.Eq("columnB", true)), 
     Restrictions.Conjunction().Add(Restrictions.Eq("columnC", true)).Add(Restrictions.Eq("columnD", true)) 
); 
                   ) 
+0

J'ai fini par le faire complètement différemment de cela en raison de la nature dynamique de ma requête constructeur, mais cela répond à la question comme indiqué. Merci! J'ai utilisé les fonctionnalités de surcharge d'opérateur de nhibernate pour créer un AbstractCriterion, puis j'ai ajouté tout le abstractcriterion à un Restrictions.Disjunction(). –

1

Vous pouvez également utiliser

.Add(
    Expression.Or(
     Expression.And(Expression.Eq("columnA",true), Expression.Eq("columnB",true)), 
     Expression.And(Expression.Eq("columnC",true), Expression.Eq("columnD",true))) 
Questions connexes