根据条件应用 Slick 过滤器

Apply Slick filter depending on condition

我有以下带有过滤器的 Slick 函数 (d.sk < sk)

   def func1(sk: Int) = {
      val date2 = TableQuery[DatesDB] 
      val action = date2.filter( d => (d.sk < sk)).result
      val future = db.run(action.asTry)
      future.map {
        case Success(s) => 
          if (s.length > 0)
            Some(s(0))
          else
            None
        case Failure(e) => throw new Exception("Failure")
      }
   }

我需要为此函数添加一项功能,根据条件 X,过滤器应该是现有过滤器或 (d.sk <= sk)。由于过滤器不是变量,我不知道如何实现这一点,而且我不想重写过滤器或操作。有什么想法吗?

Cyrille 的 link 似乎有点不同,但这种方法可能会扩展到涵盖您的情况。不过,如果这只是一个地方,那么旧 if:

有什么问题
val date2 = TableQuery[DatesDB] 
val query = if (condition) date2.filter(d => (d.sk < sk)) else date2.filter(d => (d.sk <= sk))
val action = query.result

另一个想法

val date2 = TableQuery[DatesDB] 
val action = date2.filter(d => ((LiteralColumn(condition) && (d.sk < sk)) || (LiteralColumn(!condition) && (d.sk <= sk))).result