【问题标题】:How can I negate "inSet" in a Scala Slick query?如何在 Scala Slick 查询中否定“inSet”?
【发布时间】:2014-02-17 03:57:21
【问题描述】:

我正在尝试使用否定的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,但这会使我正在编写的函数复杂化,所以如果可能的话,我宁愿使用否定的inSet。 )

【问题讨论】:

    标签: scala slick


    【解决方案1】:

    其中一个

    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),这没有多大意义。

    【讨论】:

      猜你喜欢
      • 2012-12-21
      • 1970-01-01
      • 2017-06-07
      • 2012-10-17
      • 2017-04-06
      • 2019-04-14
      • 2016-05-13
      • 2021-03-20
      • 1970-01-01
      相关资源
      最近更新 更多