Scala Slick 3.3.3在多列上使用“.inSet”的过滤表
我有一个以元组(2个不同的列)作为主键的表。我正在尝试创建一个函数Scala Slick 3.3.3在多列上使用“.inSet”的过滤表,scala,slick,slick-3.0,Scala,Slick,Slick 3.0,我有一个以元组(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
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
s?是的,可以组合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)
}
}