scala slick - 如何命名产生的字段?

时间:2017-02-06 13:17:58

标签: scala slick

在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来访问该名称我并不舒服。

有什么方法可以命名产生的字段吗?

谢谢。

2 个答案:

答案 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)