【发布时间】:2019-11-25 10:37:01
【问题描述】:
我目前正在使用这种非常糟糕的模式匹配对 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)
}
}
我需要在另一个查询中重用orderBypart,但我找不到隔离它的方法。
如果我尝试使用类似的东西:
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”。
【问题讨论】:
-
你得到什么语法错误?你用的是什么版本的
squeryl? -
可能我真正的问题是:什么是“orderBy (chk.checkId asc)”以及如何构建一个返回它的函数?