scala – 用于任意列的Slick查询过滤器

假设我有一个包含x和y列的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语法.

最佳答案
如果您创建Rep [Int] =>类型的函数Rep [Boolean],您可以在过滤方法中使用它并传递列:

// 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))

转载注明原文:scala – 用于任意列的Slick查询过滤器 - 代码日志