Scala Slick 3.3.3在多列上使用“.inSet”的过滤表

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

我有一个以元组(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
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)
  }
}