Slick:如何查询与Map键和该键值相匹配的行?

时间:2016-03-14 23:36:37

标签: scala slick

如果给定参数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.firstColumn[String],因此

无法编译。有没有一种简单的方法来生成我没有看到的查询?

1 个答案:

答案 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]