1

我有一个案例类 MyRecord,我想将其用于结果集中的每一行:

case class MyRecord(id: Int, remindeMe: Option[org.joda.time.DateTime])

如何使用 Scala 和 Anorm 和 Play Framework 选择表中的所有行并返回 MyRecord 列表?

我尝试过:

def getRecords() : List[MyRecord] = {
      val records = SQL("SELECT id, data FROM mytable")().collect {
          case Row(id: Int, Some(data: Long)) => 
                      MyRecord(id, new org.joda.time.DateTime(data))
     }
}

如果该列data是 null 我想要,None否则我想要Some(data)在案例类中作为提醒。是的,上面的Scala代码是非常错误的,但我不明白如何解决这个问题。

4

1 回答 1

0

这应该可以工作,因为您已经定义了选项:

def getRecords() : List[MyRecord] = {
      SQL("SELECT id, data FROM mytable")().collect {
          case Row(id: Int, Some(data: Long)) => 
                  MyRecord(id, Some(new org.joda.time.DateTime(data)))
          case Row(id: Int, None) => 
                  MyRecord(id, None)

     }
}

您粘贴的情况将忽略所有 None 结果,因为它们与 Some(data) 不匹配

编辑:正如@kassens 所说,在最后添加“toList”可以解决它。我在 Play 1.2.2-Scala 0.91 环境中对其进行了测试。有办法给他加分吗?:)

于 2011-08-12T15:19:40.140 回答