2009-08-14 102 views
1

之間如何創建NHibernate的析取,將實現以下SQL:Restrictions.Disjunction()條件A和條件B或條件C及條件d

SELECT * FROM MyTable的
凡(conditionA = True和conditionB =真)
OR(conditionC = True和conditionD =真)

從我所看到的,在Disjuntion()採用單一準則和 「手術室」 在一起。是否有可能將標準組合在一起,並將其與另一對標準「對照」?

我希望這個問題很清楚。

謝謝!

回答

6

這不完全漂亮,但你會寫這樣的:

.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

我落得這樣做從這個完全不同,因爲我查詢的動態特性建設者,但這確實回答了所述的問題。謝謝! 我使用nhibernate的運算符重載特性來創建AbstractCriterion,然後將所有abstractcriterion添加到Restrictions.Disjunction()中。 – 2009-08-14 14:28:15

1

您還可以使用

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