2014-11-08 93 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映射到狀態。

希望這會幫助有人嘗試相同的事情。