2015-09-15 5 views
5

To pytanie jest związane z another. Próbuję również sortować zapytanie z joinLeft, ale w wersji 3.0.0. I jako opcja Rep są automatycznie podnoszone jak zrobiłbym dokładnie to samo:Slick 3.0.0 - Jak sortować na zapytanie z joinLeft

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) 
} 

Dzięki,

Odpowiedz

0

Na pewno kopiowane poprawny kod?

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

brakuje ")"

Powinny być

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

Przypuszczam, że brakuje nawiasu to tylko literówka. Miałem ten problem niedawno, kiedy określający kierunek sortowania w niewłaściwym miejscu, za pomocą przykładu:

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

Powinno być:

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

Dzięki za odpowiedź, ale tak, to był tylko literówka. –

+0

To rozwiązało podobny problem, z którym miałem do czynienia – ThaDon

0

można umieścić pola w zestawie wyników. Na przykład:

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)