2009-08-14 105 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)))