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