Nhibernate 限制条件。条件a和条件b或条件c和条件d之间的析取()

Nhibernate 限制条件。条件a和条件b或条件c和条件d之间的析取(),nhibernate,detachedcriteria,Nhibernate,Detachedcriteria,如何在NHibernate中创建析取,以实现以下sql: 从MyTable中选择* 其中(conditionA=true和conditionB=true) 或(条件C=true和条件D=true) 据我所见,disjunition()采用单一标准,并将它们“OR”在一起。是否可以将标准组合在一起并“或”与另一对标准相对应 我希望这个问题足够清楚 谢谢 这不太好看,但你可以这样写: .Add( Restrictions.Or( Restrictions.Conjunctio

如何在NHibernate中创建析取,以实现以下sql:

从MyTable中选择* 其中(conditionA=true和conditionB=true)
或(条件C=true和条件D=true)

据我所见,disjunition()采用单一标准,并将它们“OR”在一起。是否可以将标准组合在一起并“或”与另一对标准相对应

我希望这个问题足够清楚


谢谢

这不太好看,但你可以这样写:

.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))
 );
                                                                )

虽然不太好看,但你可以这样写:

.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))
 );
                                                                )
你也可以使用

.Add(
     Expression.Or(
         Expression.And(Expression.Eq("columnA",true), Expression.Eq("columnB",true)),
         Expression.And(Expression.Eq("columnC",true), Expression.Eq("columnD",true)))
你也可以使用

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

由于查询生成器的动态特性,我最终的做法与此完全不同,但这确实回答了前面提到的问题。谢谢我使用nhibernate的运算符重载功能创建了一个AbstractCriteria,然后将所有AbstractCriteria添加到Restrictions.Disjunction()中。由于查询生成器的动态特性,我最终的做法与此完全不同,但这确实回答了前面提到的问题。谢谢我使用nhibernate的运算符重载功能创建了一个AbstractCriteria,然后将所有AbstractCriteria添加到一个Restrictions.Disjunction()中。