Scala 如何重用squeryorderby子句?

Scala 如何重用squeryorderby子句?,scala,squeryl,Scala,Squeryl,我目前正在使用这种非常糟糕的模式匹配对各个字段上的Squeryl(0.9.9)中的行进行排序: sortBy match { case Some("checkId") => orderBy.getOrElse("DESC") match { case "ASC" => where(whereClause(chk)) select(chk) orderBy (chk.checkId asc) case _ => where(whereClause(chk))

我目前正在使用这种非常糟糕的模式匹配对各个字段上的Squeryl(0.9.9)中的行进行排序:

sortBy match {
  case Some("checkId") => orderBy.getOrElse("DESC") match {
    case "ASC" => where(whereClause(chk)) select(chk) orderBy (chk.checkId asc)
    case _ => where(whereClause(chk)) select(chk) orderBy (chk.checkId desc)
  }
  case Some("checkName") => orderBy.getOrElse("DESC") match {
    case "ASC" => where(whereClause(chk)) select(chk) orderBy (chk.checkName asc)
    case _ => where(whereClause(chk)) select(chk) orderBy (chk.checkName desc)
  }
}
我需要在另一个查询中重用
orderBy
部分,但我找不到隔离它的方法

如果我尝试使用以下内容:

def ord = orderBy(chk.checkId desc)
我得到一个语法错误

更新: 为了更清楚地了解我要做的事情:

我可以定义这3个功能:

 def desc(node: ExpressionNode):ExpressionNode = new OrderByArg(node) {desc}
  def asc(node: ExpressionNode):ExpressionNode = new OrderByArg(node) {desc}

  def selectSorted2(chk: CheckResultsItem,  sortBy: Option[String], orderBy: Option[String]):ExpressionNode =
    sortBy match {
      case Some("checkId") => orderBy.getOrElse("DESC") match {
        case "ASC" => asc(chk.checkId )
        case _ => desc (chk.checkId )
      }
      case Some("checkName") =>     orderBy.getOrElse("DESC") match {
        case "ASC" =>asc (chk.checkName )
        case _ =>desc (chk.checkName )
      }
但当我尝试使用它们时:

  val res = from(checkResultsTable)(chk => {
        where(chk.checkId === checkId) select(chk)  model.CheckResultsItem.selectSorted2(chk, sortBy, orderBy )
      }).page(offset_and_limit._1, offset_and_limit._2)


我始终无法解析符号“selectSorted2”,即使它已定义、已导入且可见。

orderBy运算符不能返回。它是trait
org.squeryl.dsl.boilerplate.OrderBySignatures
中定义的方法。您需要定义自己的方法来接受OrderBySignatures类型的对象(或者扩展它的类型,在本例中,我相信它是)并对该对象调用.orderBy方法。如果你想让你的方法像一个Squeryl操作符一样工作,你需要从SelectState->youmodifiedselectstatethatthattainsourmethod进行隐式转换

你会得到什么语法错误?您使用的是什么版本的squeryl?我真正的问题可能是:什么是“orderBy(chk.checkId asc)”以及如何构建返回它的函数?