我正在尝试使用否定的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}}如果可能的话。)
答案 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)
,这没有多大意义。