假设我想执行查询:
select columnName1,columnName2,Sum(*)
from table
group by columnName1,columnName2
其中columnName1,columnName2由list [string](“columnName1”,columnName2“)提供
我怎么能用光滑的方式做到这一点? 如果列是编译时知道的,我可以很容易地使用groupBy函数:
tableQuery.groupBy { r => (r.columnName1,r.columnName2)}.map (case groupName,group) => (groupName._1,groupName._2,group.map(...).avg)}
但是动态呢?
答案 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 */})
答案 1 :(得分:0)
要将字符串列名转换为Rep类型,可以使用Slick AST Library。
我有类似的要求,并使用AST Library
完成。
你可以参考this code,它做同样的事情。我也遵循相同的代码来解决我的要求。