Scala “怎么做?”;或;滤油

Scala “怎么做?”;或;滤油,scala,playframework-2.0,slick,slick-2.0,Scala,Playframework 2.0,Slick,Slick 2.0,在斯威克,我们可以使用 query.filter( m => (m.state === state1 && m.status === status1) || (m.state === state2 && m.status == status2)) 对于where子句中的“或”条件。然而,我的要求是我在列表中有“或”条件(由用户作为URL的一部分传递)。条件列表包括状态元组和状态元组,如 List[(state1, status1),(state2, st

在斯威克,我们可以使用

query.filter( m => (m.state === state1 && m.status === status1) || (m.state === state2 && m.status == status2)) 
对于where子句中的“或”条件。然而,我的要求是我在列表中有“或”条件(由用户作为URL的一部分传递)。条件列表包括状态元组和状态元组,如

List[(state1, status1),(state2, status2),(state3, status3)]
所以我想要的是能够在filter内部构建| |语句,这样我就可以使用列表中的每个条件来生成查询,但我不确定如何实现这一点。或者如果有类似的事情

query.applyOrFilters.orFilter(condition1).orFilter(condition2) 
这将实际对查询对象执行条件1或条件2。
到目前为止,使用Slick或for INTERNATIONS有可能吗?

在使用它的过程中,我终于找到了一种方法:-

query.filter {
  m => conditions.map(n => m._13 === n._1 && m._14 === n._2).reduceLeft(_ || _)
}
其中
条件
的形式为
列表[(字符串,字符串)]
m._13
映射到状态,而
m._14
映射到状态


希望这能帮助其他人尝试同样的方法。

如果您需要基于谓词、连接和析取(有点像Hibernate/JPA Criteria API)的更具可组合性的方法,您可以查看我的答案