如何在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/