【问题标题】:Slick query filter acting on arbitrary columns作用于任意列的灵活查询过滤器
【发布时间】:2016-06-07 20:42:51
【问题描述】:

假设我有一个 SQL 表,其中包含 xy 列,每个整数都有值。我可以像这样做一个 Slick 查询来选择 5 <= x <= 10

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

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

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

如果我正在编写原始 SQL,这将非常简单,但我看不出如何使用 Slick 语法来做到这一点。

【问题讨论】:

    标签: scala slick


    【解决方案1】:

    如果创建Rep[Int] =&gt; 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))
    

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2014-01-04
      相关资源
      最近更新 更多