据我了解,您需要以下形式的查询:
SELECT column FROM table WHERE
column LIKE 'a%'
OR column LIKE 'b%'
OR column LIKE 'bc%'
这基本上转化为 Slick:
val query = table.filter(row =>
row.column like 'a%' || row.column like 'b%' || row.column like 'bc%'
)
所以现在的问题是如何LIKE
从 Scala 列表中构造这些部分。
标准集合库有几种方法可以做到这一点。这是一个(reduceLeft
):
val patterns = Seq("a", "b", "bc").map(_ + "%")
val query = table.filter(row =>
patterns.map(pattern => row.column like pattern).reduceLeft(_ || _)
)
我们正在做的是:
- 将列表
patterns
转换为 Slicklike
表达式列表
- 然后将 Slick 表达式列表与
||
- 这给了我们一个在 a 中使用的 Slick 表达式(
like
s 与 结合or
)filter
。
代替like
,您还可以使用startsWith
避免必须添加%
到您的字符串列表中:
val patterns = Seq("a", "b", "bc")
val query = table.filter(row =>
patterns.map(pattern => row.column startsWith pattern).reduceLeft(_ || _)
)
Slick 会将其转换为 SqlLIKE
表达式。