У меня есть сложный SQL запрос, выполненный из нескольких объединений/влево присоединяется, которые приводят тип выглядит следующим образом:Mapping Slick SQL Результаты запроса на случай классы
val query = sql"""
// body of query
""".as[(Long, String, String, Int, Long, Long, String, Int, Option[Int], Option[Int], Option[String], Option[Timestamp], Option[Timestamp])]
В результате выполнения этого запроса является список кортежей с 10+ свойств. Списка обрабатывается для получения классов случая:
db.run(query).map(_.groupBy { case (p1, p2, p3, p4, _, _, _, _, _, _, _, _, _) =>
(p1, p2, p3, p4)
}.map { case ((o1, co2, o3, o4), o5) =>
CaseClass1(o1, co2, o3, Seq(o4), o5.groupBy {
case (_, _, _, _, u1, _, _, _, _, _, _, _, _) => u1
}.map { case (t1, t2) =>
CaseClass2(t1, t2.flatMap {
case (_, _, _, _, _, _, _, _, Some(n1), Some(n2), Some(n3), Some(n4), Some(n5)) => Some(CaseClass3(n1, n2, n3, n4, n5))
case _ => None
}, t2.map {
case (_, _, _, _, _, m1, m2, m3, _, _, _, _, _) => CaseClass4(m1, m2, m3, l1)
})
}.toSeq)
}
Процесс отображения результирующего набора в случае классы сам по себе не очень расширяемые и дают мне головную боль каждый раз, когда я добавить новое свойство быть выбрано из запроса. Существует ли более простой способ сопоставления набора результатов с классами case?
Не вам нужно 'GetResult [MyMatch]' для того, чтобы работать? – dwickern
Да, но это намного легче поддерживать, чем длинные списки (_, _, _) .. Я отредактирую, чтобы добавить это – jazmit
Это выглядит великолепно! Я попробую и дам вам знать, как все прошло. –