2014-11-08 12 views
6

In chiazza di petrolio che possiamo usareCome fare "o" filtro nella chiazza di petrolio

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

per un "OR" condizione in cui clausola. Tuttavia, il mio requisito è che io abbia delle condizioni "OR" in un elenco (passato dall'utente come parte dell'URL). L'elenco delle condizioni include tuple di stato e stato come

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

Quindi quello che volevo era essere in grado di costruire il || dichiarazione all'interno del filtro in modo che possa utilizzare ciascuna delle condizioni dall'elenco per generare la query, ma non sono sicuro di come ottenerlo. O se c'è qualcosa di simile

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

che sarà effettivamente fare condizione1 O condizione2 sul oggetto query. È possibile con Slick o con per le comprensioni fin da ora?

+0

Se hai bisogno di qualcosa di più componibile, basato su predicato, congiunzioni e disgiunzioni (un po 'come Hibernate/JPA Criteria API), puoi controllare la mia risposta in http://stackoverflow.com/questions/28281232/slick-create- query-congiunzioni-disgiunzioni-dinamico/28303670 # 28.303.670 –

risposta

10

Durante la riproduzione intorno con esso, ho finalmente trovato un modo per farlo: -

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

dove conditions è della forma List[(String,String)], m._13 mappe a stato e m._14 mappe di stato.

Speriamo che questo possa aiutare qualcuno a provare la stessa cosa.