尝试添加'&&'使用inSetBind时我的过滤器的子句,但我不能。
这有效:
db.run(lists.filter(f => f.id inSetBind(listIds)).result)
当我尝试添加&&第一节我得到一个错误:
db.run(lists.filter(f => f.id inSetBind(listIds)&&(f.locationId === locationId))。result)
错误是:
ambiguous implicit values:
[error] both value BooleanOptionColumnCanBeQueryCondition in object CanBeQueryCondition of type => slick.lifted.CanBeQueryCondition[slick.lifted.Rep[Option[Boolean]]]
[error] and value BooleanCanBeQueryCondition in object CanBeQueryCondition of type => slick.lifted.CanBeQueryCondition[Boolean]
[error] match expected type slick.lifted.CanBeQueryCondition[Nothing]
答案 0 :(得分:1)
据我所知,这是一个简单的解析错误。 Scala看到了
lists.filter(f => f.id inSetBind(listIds) && (f.locationId === locationId))
并将其解析为
lists.filter(f => f.id (inSetBind(listIds) && (f.locationId === locationId)))
所以很难理解。尝试
lists.filter(f => (f.id inSetBind(listIds)) && (f.locationId === locationId))
或者,在这种情况下可能更清楚
lists.filter(f => f.id.inSetBind(listIds) && (f.locationId === locationId))
可以找到Scala的优先规则here。以字母开头的中缀运算符(例如inSetBind
)的优先级低于任何其他(中缀)运算符,这就是&&
绑定比它更紧密的原因。