我已经在slick google群组中提出了这个问题。如果寻求不检查小组的人的帮助,请在此处发布。
我正在尝试实现类似于scala-kendo的过滤器。我们已经使用普通查询开发了这个过滤器功能。现在,我正在尝试将其转换为光滑的表达式,类似于slick-kendo所做的。 我需要实现不区分大小写的过滤。但是,我无法找到如何做到这一点。 scala.slick.ast.Library中的成员仅提供区分大小写搜索的方法。
修改
添加代码:
private def predicate(e: E, f: Filter) = {
val (c, v) = (colNode(e, f.field), LiteralNode(f.value))
val L = Library
def \(fs: FunctionSymbol, nodes: Node*) = fs.typed[Boolean](nodes: _*)
Column.forNode[Boolean](f.operator match {
case "EqualTo" => \(L.==, c, v)
case "NotEqualTo" => \(L.Not, \(L.==, c, v))
case "GreaterThen" => \(L.>, c, v)
case "GreaterThenOrEqualTo" => \(L.>=, c, v)
case "LessThen" => \(L.<, c, v)
case "LessThenOrEqualTo" => \(L.<=, c, v)
case "StartsWith" => \(L.StartsWith, c, v)
case "StartsWithIgnore" => \(L.StartsWith, c, v)
case "EndsWith" => \(L.EndsWith, c, v)
case "Contains" => \(L.Like, c, LiteralNode(s"%${f.value}%"))
case "DoesNotContain" => \(L.Not, \(L.Like, c, LiteralNode(s"%${f.value}%")))
})
}
如您所见,StartsWith
中有EndsWith
,Library
等方法,但我需要StartsWithIgnoreCase
,EndsWithIgnoreCase
等< / p>
有人可以提供任何建议来实现我需要的这个功能。
答案 0 :(得分:0)
如果我理解你,你想要这样的东西:http://slick.typesafe.com/doc/3.0.0-RC3/queries.html#sorting-and-filtering - 参见4.例子“val q4 = coffees.filter ......”。这部分文档也适用于光滑的2.x.
答案 1 :(得分:0)
最后,找到了解决方案。粘贴在这里为他人受益。浏览了光滑的代码库,了解了如何将节点转换为列并在列上应用小写。
case "EqualToIgnoreCase" => \(L.==, (Column.forNode[String](c).toLowerCase).toNode, LiteralNode(f.value.toLowerCase()))