如何在NHibernate中对表达式集进行分组?例如,我想像这样过滤查询:

(ShowOnDate IS NULL OR ShowOnDate <= GETDATE()) AND (ExpirationDate IS NULL OR ExpirationDate >= GETDATE())


我可以分别添加这四个条件,但是我无法弄清楚如何模拟寄生组合。谢谢!

编辑以显示我的最终解决方案:

            result = this.Session.CreateCriteria<Model.News>()
                .Add(Expression.IsNull("ExpirationDate") || Expression.Gt("ExpirationDate", DateTime.Now.Date))
                .Add(Expression.IsNull("ShowOnDate") || Expression.Le("ShowOnDate", DateTime.Now.Date))
                .AddOrder(new Order("SubmittedDate", true))
                .List<Model.News>();

最佳答案

Criteria API为||提供了运算符重载。和&&允许您结合以下条件:

条件。添加(
(Restrictions.IsNull(“ ShowOnDate”)
|| Restrictions.Le(“ ShowOnDate”,DateTime.Now))
&&(Restrictions.IsNull(“ ExpirationDate”)
|| Restrictions.Ge(“ ExpirationDate”,DateTime.Now)));



如果要避免重载运算符,则可以使用结合/析取来实现相同的效果(详细程度大大提高):

条件.Add(Restrictions.Conjunction()
.Add(Restrictions.Disjunction()
.Add(Restrictions.IsNull(“ ShowOnDate”))
.Add(Restrictions.Le(“ ShowOnDate”,DateTime.Now))))
.Add(Restrictions.Disjunction()
.Add(Restrictions.IsNull(“ ExpirationDate”))
.Add(Restrictions.Ge(“ ExpirationDate”,DateTime.Now))))​​));

关于nhibernate - 如何在NHibernate中对表达式进行分组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2068030/

10-10 11:43