如何在Slick的Case-If-Then-Else中返回复合类型

时间:2014-06-24 10:01:48

标签: scala slick

我刚刚开始将我的脚趾浸入Slick。

在咖啡供应商的例子中,我试着" Case If Then Else"像这样:

val q = coffees.withFilter(_.price > 9.0).flatMap({ c =>
  suppliers.withFilter(_.id == c.supID).map({ s =>
    val t = c.name > s.name
    Case If t Then { (c.name, s.name) } Else { (s.name, c.name) }
  })
})

编译器发出错误:

could not find implicit value for evidence parameter of type scala.slick.ast.TypedType[(scala.slick.lifted.Column[String], scala.slick.lifted.Column[String])]
        Case If t Then { (c.name, s.name) } Else { (s.name, c.name) }
                         ^

对于像List这样的其他复合类型也有很多相同的错误。我想我自己定义一个隐含的问题类型,但我不知道从哪里开始。

2 个答案:

答案 0 :(得分:3)

目前不支持,我创建了一张票:https://github.com/slick/slick/issues/866

解决方法:为每个标量值编写单独的If Then构造

答案 1 :(得分:2)

尝试:

    val q = coffees.withFilter(_.price > 9.0).flatMap({ c =>
      suppliers.withFilter(_.id == c.supID).map{ s =>
      (Case If c.name > s.name Then c.name Else s.name,
       Case If c.name > s.name Then s.name Else c.name)}})