如何将 `inSet` 与列元组一起使用?

How to use `inSet` with tuple of columns?

在Slick中,我们可以对单个列使用inSet来执行sql IN子句。但是我不知道如何将它与一对列一起使用。

PostgresQL 允许 IN 的以下用法:

select * from table where (table.a, table.b) in ( values
 (1, 'foo'),
 (2, 'bar')
)

我以为我可以在 slick 中执行以下操作,但它无法编译:

TableQuery[Table].filter(
  row => (row.a, row.b) inSet Seq(
    (1, "foo"),
    (2, "bar"))
  )

有可能实现吗?

现在您可以手动完成,编写如下内容:

val expectedTuples = Seq(
  (1, "foo"),
  (2, "bar"),
  (3, "baz")
)

TableQuery[Table].filter(
  row =>
    expectedTuples.map{
      case(fst, snd) => row.a === fst && row.b === snd
    }.reduce(_ || _)
)

这在 slick 中是已知的 feature request