【发布时间】:2016-09-13 19:17:14
【问题描述】:
我正在尝试将 sortBy 动态包含到我的查询中,该查询根据查询参数中的字符串名称进行排序。在 Slick 3 中,这已被证明是相当棘手的。目前我的设置是:
trait Model {
type ATable <: AbstractTable[_]
def tableQuery: TableQuery[ATable]
def sortMap: Map[String, Rep[_]]
private def sortKey[T](e: ATable, sort: (String, SortOrder)): ColumnOrdered[_] = sort match {
case (field, SortOrder.Asc) => ColumnOrdered(sortMap.getOrElse(field, throw new ClientException(s"Can't sort by $field")), Ordering(Ordering.Asc))
case (field, SortOrder.Desc) => ColumnOrdered(sortMap.getOrElse(field, throw new ClientException(s"Can't sort by $field")), Ordering(Ordering.Desc))
}
def all(sort: (String, SortOrder)) = tableQuery.sortBy(sortKey(_, sort)).result
}
object User extends Model {
type ATable = Tables.User
val tableQuery = Tables.User
val sortMap = Map( "id" -> tableQuery.id )
}
但是运行db.run(User.all(("id", SortOrder.Asc))会抛出以下错误:
slick.SlickException: No type for symbol name found in Vector[t2<@t3<UnassignedType>>]
有谁知道更好的解决方案或我哪里出错了?
【问题讨论】: