【问题标题】:Slick 3.0.0 - How to sortBy on a query with joinLeftSlick 3.0.0 - 如何使用 joinLeft 对查询进行排序
【发布时间】:2015-09-15 16:50:56
【问题描述】:

此问题与another 有关。我还尝试使用 joinLeft 但在 slick 3.0.0 中对查询进行排序。由于 Option Rep 被自动解除,我将如何做同样的事情?:

def list(filter: String, orderBy: Int):Future[Seq[(Computer, Option[Company])]] = {
    val initialQuery = for {
        (computer, company) <- Computer.filter(_.name like filter) leftJoin 
            Company on (_.companyId === _.id)
    } yield (computer, company)

    val sortedQuery = orderBy match {
        case 2 => initialQuery.sortBy(_._1.name) //Works ok, column from a primary table
        case 3 => initialQuery.sortBy(_._2.map(_.name)) //could not find implicit value for parameter ol: slick.lifted.OptionLift[slick.lifted.ColumnOrdered[String],slick.lifted.Rep[Option[QO]]]
    }
    db.run(sortedQuery.result)
}

谢谢,

【问题讨论】:

    标签: scala playframework slick slick-3.0 play-slick


    【解决方案1】:

    我想缺少括号只是一个错字。最近,当我使用您的示例在错误的位置指定排序方向时,我遇到了这个问题:

    case 3 => initialQuery.sortBy(_._2.map(_.name.asc))
    

    应该是:

    case 3 => initialQuery.sortBy(_._2.map(_.name).asc)
    

    【讨论】:

    • 感谢您的回答,但是是的,这只是一个错字。
    【解决方案2】:

    我也有这个问题。我有一个 joinLeft,我想在一个布尔列上订购。你必须决定当它的连接为空时你想用什么值替换它。

    例如:

    initialQuery.sortBy(_._2.map(_.name).getOrElse(""))
    

    【讨论】:

      【解决方案3】:

      您确定您复制了正确的代码吗?

      case 3 => data.sortBy(_._2.map(_.name) //could not find implicit value for parameter
      

      缺少一个“)”

      应该是

      case 3 => data.sortBy(_._2.map(_.name))
      

      【讨论】:

        【解决方案4】:

        您可以将字段放入结果集中。 例如:

         val initialQuery = for {
                (computer, company) <- Computer.filter(_.name like filter) leftJoin Company on (_.companyId === _.id)
                } yield (computer, company, company.map(_.name))
        
            val sortedQuery =  orderBy match {
                case 2 => initialQuery.sortBy(_._1.name) 
                case 3 => initialQuery.sortBy(_._3)
            }
        
            db.run(sortedQuery.map(v => (v._1, v._2).result)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-08-14
          • 2023-04-02
          • 1970-01-01
          • 1970-01-01
          • 2012-12-31
          • 1970-01-01
          • 2021-11-30
          相关资源
          最近更新 更多