可选分页

Optional pagination

我正在尝试使用可选分页实现简单的数据库查询。我的尝试:

def getEntities(limit: Option[Int], offset: Option[Int]) = {

  // MyTable is a slick definition of the db table 

  val withLimit = limit.fold(MyTable)(l => MyTable.take(l))    // Error here. 
                                                               // Mytable and MyTable.take(l) 
                                                               // has various types
  val withOffset = offset.fold(withLimit)(o => withLimit.drop(o))
  val query = withOffset.result

  db.run(query)
}

问题是一个错误:

type mismatch:
found: slick.lifted.Query
required: slick.lifted.TableQuery

如何让这段代码可以运行?也许更漂亮一点?


我目前从 TableQuery 获取 Query 的方法是添加 .filter(_ => true),但恕我直言,这不太好:

val withLimit = limit.fold(MyTable.filter(_ => true))(l => MyTable.take(l))

尝试替换

val MyTable = TableQuery[SomeTable]

val MyTable: Query[SomeTable, SomeTable#TableElementType, Seq] = TableQuery[SomeTable]

即指定类型(静态向上转换 TableQueryQuery)。