如何在Scala Slick查询中否定“inSet”?

时间:2014-02-17 03:57:21

标签: scala slick

我正在尝试使用否定的inSet构建一个Slick查询,但我无法找出正确的语法。我想做一些像

这样的事情
val lst = List(1, 2, 3)
Query(Table1).where(_.id1 === 1).where(!(_.id2 inSet lst)).list

Query(Table1).where(_.id1 === 1).where(isNot(_.id2 inSet lst)).list

两者都没有通过集合。是否有可能否定这样的inSet,如果是这样,那么正确的语法是什么?或者是否有另一种方法来构建不需要否定inSet的查询?我正在使用Slick 1.0.1,我希望我们将在下个月内升级到Slick 2.0。 (我可以将filterNot(lst.contains(_.id2))应用于查询结果,而不是在查询中放入否定的inSet,但这会使我正在写的函数复杂化,所以我宁愿使用否定的{{} 1}}如果可能的话。)

1 个答案:

答案 0 :(得分:11)

其中一个

Query(Table1).filter(_.id1 === 1).filter(row => !(row.id2 inSet lst)).list

Query(Table1).filter(_.id1 === 1).filterNot(_.id2 inSet lst).list

相关: https://github.com/slick/slick/pull/204

附注: where已弃用。使用Scala集合术语而不是SQL术语。此外,您错误地认为Scala !(_.id2 inSet lst)扩展为x => !(x.id2 inSet lst),而事实上它扩展为!(x => x.id2 inSet lst),这没有多大意义。