How to do “OR” filter in slick

老子叫甜甜 提交于 2019-12-18 19:44:40

问题


In slick we can use

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

for an "OR" condition in where clause. However my requirement is I have "OR" conditions in a list (passed by user as part of URL). Conditions list includes tuples of state and status like

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

So what I wanted was to either be able to build the || statement inside of filter so that I can use each of the conditions from the list to generate the query but I am not sure how to achieve that. Or if there is something like

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

which will actually do condition1 OR condition2 on query object. Is it possible with Slick or with for comprehensions as of now ?


回答1:


While playing around with it, I finally found a way to do it:-

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

where conditions is of the form List[(String,String)], m._13 maps to state and m._14 maps to status.

Hopefully this will help someone trying out same thing.



来源:https://stackoverflow.com/questions/26815913/how-to-do-or-filter-in-slick

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!