如何在我的order by子句不同的地方编写查询?

时间:2014-06-04 19:48:32

标签: scala slick

我有一个看起来像的查询:

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语句的唯一方法是因为排序方向会变得非常复杂。

我确信有更聪明的方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

那件事也让我感到烦恼。我最终实现了这个特性,我在我的表类中实现了它。在sortBy中,您可以调用o.colByName(...)并根据方向排序。

trait Sortable {
  protected val orderColMap: Map[String, Column[_]]
  def colByName(colName: String) = orderColMap.get(colName)
}

仍然不是很优雅,因为它会强制你为每个表实现一个地图,但至少可以保存你的切换/匹配。