假设我有一个包含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语法来完成它。
答案 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))