我想在Slick 2.0.x中执行类似的操作:select users with age <= maxAge or if maxAge is None, select all users (limited by a number)
。我试过这个:
private def ageQuery(maxAge: Column[Option[Int]], limit: Column[Int]) = {
Users.filter(user => maxAge.map(_ >= user.age).getOrElse(true)).take(limit)
}
val compiledAgeQuery = Compiled(ageQuery _)
我遇到了以下问题:
limit
是Column[_]
,但Users.take
需要Int
。如果我将其limit
更改为Int
,那么我就不能再使用Compiled
宏了,因为它只需要Column[_]
此代码段本身无法编译:{{1}}
答案 0 :(得分:1)
我找到了以下问题的解决方案:
private def ageQuery(maxAge: Column[Option[Int]] ,limit: scala.slick.lifted.ConstColumn[Long]) = {
Users.filter(_.age < maxAge.getOrElse(1000)).take(limit)
}
这就是我所做的:
limit
参数的类型更改为scala.slick.lifted.ConstColumn[Long]
。现在它满足take
方法和Compiled
宏maxAge
的用户,当maxAge
为None
时,它会返回所有年龄小于1000岁的用户。这是解决方法,但它运作良好(假设没有人超过1000年)