【发布时间】:2016-03-27 11:23:25
【问题描述】:
我正在尝试实现一种方法来返回过滤结果,该方法基于一组可能设置或未设置的参数。似乎不可能有条件地链接多个过滤器,即从一个过滤器开始......
val slickFlights = TableQuery[Flights]
val query = slickFlights.filter(_.departureLocation === params("departureLocation").toString)
有条件地向查询添加另一个过滤器(如果它存在于参数映射中)似乎不起作用...
if (params.contains("arrivalLocation")) {
query.filter(_.arrivalLocation === params("arrivalLocation").toString)
}
这种条件过滤可以通过其他方式使用 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
})
其中slickFlights 是一个TableQuery 对象val slickFlights = TableQuery[Flights]。但是,这会产生以下编译错误:
value === is not a member of String
Intellij 还抱怨 === 是一个未知符号。也不适用于 ==。
【问题讨论】:
标签: scala playframework slick