根据条件应用 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
我有以下带有过滤器的 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