如何解决3.3.3 在多列上使用 `.inSet` 过滤表
我有一个以元组(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)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。