0

我如何return一次为我的表的一行构建一个 scala 查询?

如果它们有助于回答这个问题,我的表位于以下位置: Slick 3.0(scala)查询在多次运行之前不会返回数据(我认为)

 val q5 = for {
  c <- dat.patientsss 
} yield (c.PID, c.Gender, c.Age, c.Ethnicity)

Await.result((db.stream(q5.result).foreach(println)),Duration.Inf)

但不是打印,我需要返回每个。

4

1 回答 1

2

回答

改为使用物化结果:

val result = Await.result((db.run(q5.result)), Duration.Inf)

result是一个Seq包含所有患者数据的。用于foreach迭代结果集:

result.foreach(r => yourFancyAlgorithm(r))  // r is a single patients data row

边注

Await阻止当前线程,使 slick 的最佳功能之一过时。阻塞线程是你不应该做的事情。我强烈建议阅读scalaFuture和in 。Promise
上面的例子可以简单地写成:

val result = db.run(q5.result))

result在这种情况下将是类型Future[Seq[(yourPatientsData)]]。要访问数据,map请在结果上使用:

result.map(d => whatever)  // d is of type Seq[(yourPatientsData)]

在等待结果的同时,您的应用程序的其余部分将继续进行计算和处理。最后,当结果准备好时,回调 ( d => whatever) 将运行。

于 2015-07-01T20:22:10.003 回答