光滑的查询过滤器作用于任意列

时间:2016-02-25 07:40:16

标签: scala slick

假设我有一个包含xy列的SQL表,每个整数值都有。我可以做一个Slick查询来选择5 <= x <= 10,如下所示:

val myQuery = TableQuery[MyXYTable]
myQuery.filter(p => p.x >= 5 && p.x <= 10)

现在假设我想同时过滤5 <= y <= 10。我想重新使用相同的过滤器逻辑,但这次将其应用于y列。有没有办法在Slick中做到这一点?即编写一个过滤函数,并传入一个参数,指定它应该过滤哪一列?所以我有类似的东西:

myQuery.addFiveTenFilter(x-column).addFiveTenFilter(y-column)

如果我正在编写原始SQL,这将是非常简单的,但我无法看到如何使用Slick语法来完成它。

1 个答案:

答案 0 :(得分:0)

如果您创建了Rep[Int] => Rep[Boolean]类型的函数,则可以在filter方法中使用它并将列传递到:

// As a function literal.
val filterByFiveTen: (Rep[Int] => Rep[Boolean]) = { column =>
  column >= 5 && column <= 10
}
myQuery.filter(row => filterByFiveTen(row.xColumn))

// As a method.
def filterByFiveTen(column: Rep[Int]): Rep[Boolean] = {
  column >= 5 && column <= 10
}
myQuery.filter(row => filterByFiveTen(row.xColumn))