【问题标题】:Slick 3 dynamic groupby - fields from its List[String]Slick 3 动态 groupby - List[String] 中的字段
【发布时间】:2016-01-10 12:49:45
【问题描述】:

假设我要执行查询:

select columnName1,columnName2,Sum(*)
from table
group by columnName1,columnName2

其中 columnName1,columnName2 由 list[string] ("columnName1",columnName2") 提供

我怎么能用 slick 做到这一点? 如果编译时知道这些列,我可以轻松地使用 groupBy 函数:

tableQuery.groupBy { r => (r.columnName1,r.columnName2)}.map (case groupName,group) => (groupName._1,groupName._2,group.map(...).avg)}

但是动态呢?

【问题讨论】:

    标签: scala playframework slick slick-3.0


    【解决方案1】:

    您可以使用r.column("foo") 语法在运行时动态访问列,所以我相信您可以执行以下操作?

    columnNames = List("col1", "col2")
    tableQuery
        .groupBy(r => columnNames.map(name => r.column(name)))
        .map({ case (groupName, group) => /* do something with it */})
    

    【讨论】:

    • 在 slick 3.2.3 中,使用 columnNames 结果的集合:Slick does not know how to map the given types.
    【解决方案2】:

    要将字符串列名转换为 Rep 类型,您可以使用 Slick AST Library。 我有类似的要求并使用AST Library 完成了它。 你可以参考this code,它做同样的事情。我也遵循相同的代码来解决我的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多