在Slick我可以这样做:
val joinQuery: Query[(Rep[String], Rep[String]), (String, String), Seq] = for {
c <- coffees if c.price > 9.0
s <- c.supplier
} yield (c.name, s.name)
然后我可以访问这样的名字:
joinQuery.map(_._1)
但是使用_1来访问该名称我并不舒服。
有什么方法可以命名产生的字段吗?
谢谢。
答案 0 :(得分:2)
嗯......您可以为结果类型定义案例类,并使用它们来塑造查询结果。
case class YourQueryResult(coffeeName: String, supplierName: String)
val joinQuery = for {
c <- coffees if c.price > 9.0
s <- c.supplier
} yield (c.name, s.name)
val joinQueryResultFuture = database.run(joinQuery).map(seq => {
seq.map({ case (coffeeName, supplierName) => YourQueryResult(coffeeName, supplierName) })
})
但是,假设你想进一步修改查询本身,你可以使用模式匹配,
val joinQuery = for {
c <- coffees if c.price > 9.0
s <- c.supplier
} yield (c.name, s.name)
val modificationQuery = joinQuery.map({
case (coffeeName, supplierName) => coffeeName
})
答案 1 :(得分:0)
那可能当时还不行,但是现在您可以使用mapTo[]
进行以下操作-希望这对遇到这个问题的人有所帮助。
case class YourQueryResult(coffeeName: String, supplierName: String)
val joinQuery = for {
c <- coffees if c.price > 9.0
s <- c.supplier
} yield (c.name, s.name).mapTo[YourQueryResult]
,然后以
身份访问joinQuery.map(_.coffeeName)