Slick 3 dynamic groupby - поля из его List[String]

Допустим, я хочу выполнить запрос:

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

где имя_столбца1, имя_столбца2 берется из списка [строка] ("имя_столбца1", имя_столбца2")

как я могу сделать это со сликом? если столбцы известны во время компиляции, я могу легко использовать функцию groupBy:

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

а как же динамический?


person user1091810    schedule 10.01.2016    source источник


Ответы (2)


Вы можете использовать синтаксис r.column("foo") для динамического доступа к столбцам во время выполнения, поэтому я считаю, что вы можете просто сделать что-то вроде следующего?

columnNames = List("col1", "col2")
tableQuery
    .groupBy(r => columnNames.map(name => r.column(name)))
    .map({ case (groupName, group) => /* do something with it */})
person DK_    schedule 19.11.2016
comment
в slick 3.2.3, используя набор результатов columnNames: Slick does not know how to map the given types. - person ecoe; 10.04.2018

Чтобы преобразовать имя строкового столбца в тип Rep, вы можете использовать Удобная библиотека AST. У меня было аналогичное требование, и я сделал это, используя файл AST Library. Вы можете обратиться к этому код, который делает то же самое. Я также следовал тому же коду, чтобы решить мое требование.

person Yadu Krishnan    schedule 11.01.2016