根据条件应用Slick过滤器

时间:2017-05-04 12:25:01

标签: scala slick slick-3.0

我有以下具有过滤器(d.sk < sk)的Slick功能:

   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)。由于过滤器不是变量,我不知道如何实现这一点,我不想重写过滤器或操作。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Cyrille的链接似乎有点不同,但这种方法可能会扩展到涵盖你的情况。如果这只是一个地方,那么旧的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