Scala Slick 3.0.0-如何使用joinLeft对查询进行排序

Scala Slick 3.0.0-如何使用joinLeft对查询进行排序,scala,playframework,slick,slick-3.0,play-slick,Scala,Playframework,Slick,Slick 3.0,Play Slick,这个问题涉及到。我还尝试在slick 3.0.0中使用joinLeft对查询进行排序。当选项Rep自动取消时,我将如何做完全相同的事情 def list(filter: String, orderBy: Int):Future[Seq[(Computer, Option[Company])]] = { val initialQuery = for { (computer, company) <- Computer.filter(_.name like filter)

这个问题涉及到。我还尝试在slick 3.0.0中使用joinLeft对查询进行排序。当选项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)
}
def列表(过滤器:字符串,订货人:Int):未来[Seq[(计算机,选项[Company])]={
val initialQuery=for{
(计算机,公司)initialQuery.sortBy(u._1.name)//工作正常,主表中的列
案例3=>initialQuery.sortBy(u.\u 2.map(u.name))//找不到参数ol的隐式值:slick.lifted.OptionLift[slick.lifted.ColumnOrdered[String],slick.lifted.Rep[Option[QO]]
}
db.run(sortedQuery.result)
}

谢谢,

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

case 3 => data.sortBy(_._2.map(_.name) //could not find implicit value for parameter
缺少一个“)”

应该是

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

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

case 3 => initialQuery.sortBy(_._2.map(_.name.asc))
 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)
initialQuery.sortBy(_._2.map(_.name).getOrElse(""))
应该是:

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

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

case 3 => initialQuery.sortBy(_._2.map(_.name.asc))
 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)
initialQuery.sortBy(_._2.map(_.name).getOrElse(""))
val initialQuery=for{
(计算机、公司)initialQuery.sortBy(u._1.name)
案例3=>initialQuery.sortBy(u._3)
}
run(sortedQuery.map(v=>(v.。_1,v._2.result)

我也遇到了这个问题。我有一个joinLeft,我想对布尔列进行排序。您必须确定它的join何时为空,您想用什么值替换它

例如:

case 3 => initialQuery.sortBy(_._2.map(_.name.asc))
 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)
initialQuery.sortBy(_._2.map(_.name).getOrElse(""))

谢谢你的回答,不过是的,这只是个打字错误。