我正在使用Slick连接到我们的应用程序中的Postgres数据库。我有一个通用的过滤逻辑,其中一个Filter对象将从UI传递,它应该返回带有分页的结果。 Filter对象应该是通用的,以便可以重复使用。 过滤器对象的伪代码如下:
Filter = {
type: table
prop: List_of_conditions
page : 1
size : 10
}
目前,我正在从Filter对象构建本机SQL并执行它。但是,在查询实际执行之前,我无法使用take
和drop
。它目前获得所有结果,然后删除不必要的记录。
我知道如何使用光滑的查询,但不知道如何使用本机查询分页?
val res = StaticQuery.queryNA[Entity](queryStr).list.drop((filter.pageNo- 1) * filter.pageSize).take(filter.pageSize)
我正在使用Slick 2.1
答案 0 :(得分:1)
使用普通sql时,无法使用集合运算符构建查询。你必须在SQL中完成所有这些:
val limit = filter.pageSize
val offset = (filter.pageNo- 1) * filter.pageSize
val res = StaticQuery.queryNA[Entity](queryStr ++ s" LIMIT $limit OFFSET $offset").list
答案 1 :(得分:0)
我没有测试过,但我建议你尝试将.list
电话移到最后
val res = StaticQuery.queryNA[Entity](queryStr).drop((filter.pageNo- 1) * filter.pageSize).take(filter.pageSize).list