我有一个看起来像的查询:
object CategorySort extends Enumeration {
type CategorySort = Value
val ID, Price, CostPrice = Value
}
object SortDirection extends Enumeration {
type SortDirection = Value
val Asc, Desc = Value
}
def getProducts(categoryId: Int, sort: CategorySort, sortDirection: SortDirection): List[Product] = {
val q = for {
p <- products if p.categoryid === categoryId
} yield p
p.sortBy(o => o.id.desc).list()
}
上述功能目前不使用我的sort和sortDirection参数。
有没有办法让我修改我的功能,以便它能够以优雅的方式处理所有的排序案例?
我知道当前使用switch语句的唯一方法是因为排序方向会变得非常复杂。
我确信有更聪明的方法可以做到这一点。
答案 0 :(得分:0)
那件事也让我感到烦恼。我最终实现了这个特性,我在我的表类中实现了它。在sortBy中,您可以调用o.colByName(...)并根据方向排序。
trait Sortable {
protected val orderColMap: Map[String, Column[_]]
def colByName(colName: String) = orderColMap.get(colName)
}
仍然不是很优雅,因为它会强制你为每个表实现一个地图,但至少可以保存你的切换/匹配。