3

我想使用 Slick 执行类似的操作(我已更新为3.0.0-M1):

class MyTable extends Table[(Int, Int)](tag, "MyTable) {
   def a = column[Int]("a")
   def b = column[Int]("b")

   def * = (a, b)

   def total: Int = a + b   // That's THE thing
}

这样我以后可以执行:

val values = TableQuery[MyTable]
values.map(_.total)

当然,我被困在total方法上。该total方法可能相当复杂(我有一个应用程序,它应该计算三个计数的中位数),所以我认为它应该是最终执行的实际 Scala 代码。

像这样的东西怎么能在 Slick 中开发出来呢?

4

1 回答 1

3

只要你能用 Slick 来表达,例如

def total/*: Column[Int]*/ = a + b

它将在服务器端运行。除了将它放在Table子类中,您还可以使用隐式类从外部修补方法:

implicit class ExtendMyTable(t: MyTable){
  def total/*: Column[Int]*/ = t.a + t.b
}

它只需要在您尝试调用的范围内.total。或者,如果您确实需要客户端 Scala 编码,请改为扩展结果类型,例如

implicit class ExtendMyTableResult(t: (Int,Int)){
  def total/*: Int*/ = t._1 + t._2
}

然后做

TableQuery[MyTable].run.map(_.total)
于 2014-12-27T03:02:35.210 回答