如果给定参数foo: Map[A,B]
,row.a.inSet(foo.keySet) && row.b == foo(row.a)
,我想要一个与行匹配的查询。例子
class UserTable extends Table[Foo] {
id: Long
first: String
last: String
}
def getFoosMatchingMap(lastByFirst: Map[String, String]): Seq[Foo] = {
rows.filter(r => r.first.inSet(lastByFirst.keySet) && r.last ==
lastByFirst(r.first)).list
}
由于r.first
是Column[String]
,因此无法编译。有没有一种简单的方法来生成我没有看到的查询?
答案 0 :(得分:0)
你可以尝试
def findBy(m: Map[String, String]) =
TableQuery[UserTable].filter { row =>
val criteria = m.map {
case (column, value) =>
row.column[String](column) === value
}.reduceLeftOption(_ && _).get
}.to[List]