我正在尝试基于一组可能设置或可能未设置的参数来实现返回过滤结果的方法.似乎没有条件地链接多个过滤器,即从一个过滤器开始......
val slickFlights = TableQuery[Flights]
val query = slickFlights.filter(_.departureLocation === params("departureLocation").toString)
Run Code Online (Sandbox Code Playgroud)
有条件地在查询中添加另一个过滤器(如果它存在于params的Map中)似乎不起作用......
if (params.contains("arrivalLocation")) {
query.filter(_.arrivalLocation === params("arrivalLocation").toString)
}
Run Code Online (Sandbox Code Playgroud)
可以通过其他方式使用Slick完成这种条件过滤吗?
我遇到过MaybeFilter:https://gist.github.com/cvogt/9193220 ,这似乎是处理这个问题的一个不错的方法.但它似乎不适用于Slick 3.x.
根据Hüseyin的建议,我也尝试了以下方法:
def search(departureLocation: Option[String], arrivalLocation: Option[String]) = {
val query = slickFlights.filter(flight =>
departureLocation.map {
param => param === flight.departureLocation
})
Run Code Online (Sandbox Code Playgroud)
slickFlightsTableQuery对象在哪里val slickFlights = TableQuery[Flights].但是,这会产生以下编译错误:
value === is not a member of String
Run Code Online (Sandbox Code Playgroud)
Intellij还抱怨= =是一个未知的符号.不适用于==.