问题描述
我有一个以元组(2 个不同的列)作为主键的表。我正在尝试创建一个函数 findByPrimaryKeys(pks: Vector[(Long,Long)])
,该函数返回对集合 pks
中具有主键的所有行的查询。不过这个好像没有办法,我可以做
table.filter(t => t.id1.inSet(pks.map(_._1)) && t => t.id2.inSet(pk2.map(_._2)))
然而,这并不完全正确,因为它可能返回具有匹配 id2 但不匹配 id1 的内容。
有没有办法组合Rep
?
解决方法
是的,可以组合 Rep
值,存在从 (Rep[Long],Rep[Long])
到 Rep[(Long,Long)]
的隐式转换。但这在这种情况下无济于事,因为 inSet
是通过隐式转换添加的,而该转换需要隐式 BaseTypedType[(Long,Long)]
可用,而事实并非如此。
我知道解决这个问题的唯一方法是使用折叠:
table.filter { t =>
pks.foldLeft[Rep[Boolean]](false) { case (a,(x,y)) =>
a || (t.id1 === x && t.id2 === y)
}
}