1

結果セットのすべての行に使用したいケース クラス MyRecord があります。

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

Play Framework で Scala と Anorm を使用して、テーブル内のすべての行を SELECT し、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)の場合は、ケース クラスの rejectMe として必要です。はい、上記の 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)

     }
}

貼り付けた場合、 Some(data) と一致しないため、 None の結果はすべて無視されます

EDIT:@kassensが言ったように、最後に「toList」を追加すると解決します。Play 1.2.2-Scala 0.91 環境でテストしました。彼にポイントを与える方法はありますか?:)

于 2011-08-12T15:19:40.140 に答える