我正在尝试通过可选的分页实现简单的数据库查询。我的尝试:
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)
}
问题是一个错误:
类型不匹配:找到:slick.lifted.Query必填:slick.lifted.TableQuery
如何使此代码可运行?也许更漂亮?
我目前从Query
获得TableQuery
的解决方法是添加.filter(_ => true)
,但是恕我直言,这不是很好:
val withLimit = limit.fold(MyTable.filter(_ => true))(l => MyTable.take(l))
尝试替换
val MyTable = TableQuery[SomeTable]
with
val MyTable: Query[SomeTable, SomeTable#TableElementType, Seq] = TableQuery[SomeTable]
即以指定类型(从TableQuery
静态广播到Query
)。