我有一个带有两个左连接的Slick查询(它们最终成为
Rep [Option [ ...]]
),并且使用列映射。我需要在结果上过滤(使用like
)。如果三个列中的任何一个匹配like
条件,则必须将行包含在结果中,因此我不能预先过滤表 - 我必须过滤结果联接的Rep [Option]
。
我无法弄清楚如何过滤Rep [Option [String]]
列。 由于“无法解析符号||”,下面的代码无法编译 - 如果我删除Rep [Option]
列,则可以完美编译。
val joinedTable = Sites.map(s=>(s.id, s.gisId))
.joinLeft(SiteText.filter(_.lang==="jp").map(l=>(l.name, l.siteId))).on{ case(s,t)=>s._1===t._2 }
.joinLeft(SiteText.filter(_.lang==="en").map(l=>(l.name, l.siteId))).on{ case(st,t)=>st._1._1===t._2 }
val searchedTable = joinedTable.filter { row =>
List(
searchStr.map( t => row._1._1._2 like t ),
searchStr.map( t => row._1._2.map(_._1 like t) ),
searchStr.map( t => row._2.map(_._1 like t) )
).collect({case Some(criteria) => criteria}).reduceLeftOption(_ || _).getOrElse(true: Rep[Boolean])
}