2014-11-08 98 views
6

在光滑做“OR”过滤器,我们可以在where子句中使用如何在光滑

query.filter(m => (m.state === state1 && m.status === status1) || (m.state === state2 && m.status == status2)) 

一个“OR”条件。但是我的要求是我在列表中有“或”条件(由用户作为URL的一部分传递)。条件列表包括像

List[(state1, status1),(state2, status2),(state3, status3)] 

所以,我想要的是既能够建立和状态的元组||过滤器中的语句,以便我可以使用列表中的每个条件生成查询,但我不知道如何实现该功能。或者如果有类似的东西

query.applyOrFilters.orFilter(condition1).orFilter(condition2) 

这实际上会对查询对象执行condition1或condition2。 到目前为止可以使用Slick或者理解吗?

+0

如果你需要更多的可组合的,基于谓词,连词和分离(有点像Hibernate/JPA Criteria API),你可以在http://stackoverflow.com/questions/28281232/slick-create-查询连词 - 析取,动态/ 28303670#28303670 – 2015-02-03 16:55:14

回答

10

虽然玩了,我终于找到了一种方法来做到这一点: -

query.filter { 
    m => conditions.map(n => m._13 === n._1 && m._14 === n._2).reduceLeft(_ || _) 
} 

其中conditions的形式List[(String,String)]m._13映射到状态和m._14映射到状态。

希望这会帮助有人尝试相同的事情。