1

我在 slick 中有一个特定的查询,定义如下:

var query = for {
      a <- Assets if a.ownerId === partyIdLoggedInUser || a.userId === partyIdLoggedInUser
      m <- a.model
      l <- a.location
      ad <- l.address
      sl <- SpecificLocations if sl.assetId === a.id
} yield (a._type ~ m.make ~ m.model ~ a.serialNumber ~ 
    a.linkQualityValue.? ~ a.activationDate.? ~ l.id ~ 
    l.description ~ ad.id ~ ad.street ~ ad.number ~ 
    ad.zipcode ~ ad.city ~ ad.country ~ ad.geoLocationId.? ~ 
    sl.building.? ~ sl.floor.? ~ sl.room.? ~ sl.other.?)

后来,基于一些参数,我做了一些模式匹配并对这个查询应用了一些额外的过滤器,例如:

query = serialNumber match {
  case Some(serialNumber) => query.where(a => a._4 === serialNumber)
  case None => query
}

好吧,我想通过使用地图来缩短这些检查:

query = serialNumber.map(s => query.where(a => a._1 === s))

我不明白为什么我的地图解决方案不被接受。你看有什么问题吗?

它说found Option[Query[....]] but required Query[...]

4

2 回答 2

3

我认为这会起作用:

query = serialNumber.map(s => query.where(a => a._1 === s)).getOrElse(query)
于 2012-12-15T14:16:14.830 回答
2

map在你想去的Option[A]时候去。你可以使用然后。Option[B]Option[A]AmapgetOrElse

于 2012-12-15T14:14:59.427 回答