我有一个特定的查询,定义如下:
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[...]
答案 0 :(得分:3)
我认为这会奏效:
query = serialNumber.map(s => query.where(a => a._1 === s)).getOrElse(query)
答案 1 :(得分:2)
map
将Option[A]
带到Option[B]
,同时您想将Option[A]
带到A
。您可以使用map
,然后使用getOrElse
。