Persistent Filters:使用 Or 时在过滤器中的操作
Posted
技术标签:
【中文标题】Persistent Filters:使用 Or 时在过滤器中的操作【英文标题】:Persistent Filters: And operation in filters when using Or 【发布时间】:2015-08-12 21:11:10 【问题描述】:Persistent 有一个 OR 过滤器 ||.
,但它似乎没有对应的 &&.
我想做类似 A && (B || C) && (D || E)
的事情,但我不确定最干净的方法。
我想我可以创建像(A && B && D) || (A && C && D) || (A && B && E) || (A && C && E)
这样的所有组合。即使对于这个简单的例子,它也变得相当笨拙。不确定persistent
是否有更好的方法来做到这一点。
当我编译代码时(在selectList
)[A] ++ ([B] ||. [C]), etc.
,但不确定它是否与我想要的相同。
谢谢!
【问题讨论】:
务实地说,你可以写一个QuickCheck
属性来判断persistent
布尔表达式是否等价于规范化的布尔表达式。
@recursion.ninja。好点子。我以前没有将 QuickCheck 与面向 DB 的函数一起使用。也就是说,我可能可以手动设置一个包含A-E
的所有布尔组合的表,看看我的selectList
是否正常工作。
【参考方案1】:
您可以将++
或<>
与过滤器列表一起使用。
来自Persistent manual:
people <- selectList [PersonAge >. 25, PersonAge <=. 30] [] liftIO $ print people
过滤器列表是
AND
ed 一起,因此我们的约束意味着“年龄大于 25 且年龄小于或等于 30”。我们稍后会介绍 ORing。
【讨论】:
感谢 Cirdec。我没有机会对其进行测试,但似乎这是组合 ANDing OR 组的方式。我认为如果提供&&.
作为便利功能会更干净,因此人们必须弄清楚括号的顺序是否重要。我会将其添加为功能请求。以上是关于Persistent Filters:使用 Or 时在过滤器中的操作的主要内容,如果未能解决你的问题,请参考以下文章
SQLAlchemy query with OR/AND/like common filters
OpenTSDB使用Grafana的Filters type注解
Grails的CreateCriteria逻辑性和OR性都不正常。
使用 get_or_create 返回的 MultipleObjects
django admin list_filter "or" 条件
ajax $.post 一直报 Forbidden (CSRF token missing or incorrect.)