2015-09-15 17 views
5

Questa domanda è relativa a another. Sto anche cercando di ordinare su una query con un joinLeft ma in slick 3.0.0. E come l'opzione Rep sono sollevati automaticamente come farei la stessa cosa:?Slick 3.0.0 - Come ordinare su una query con 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) 
} 

Grazie,

risposta

0

Sei sicuro è stato copiato il codice corretto?

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

Manca un ")"

Dovrebbe essere

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

Suppongo che la parentesi manca è solo un errore di battitura. Ho avuto questo problema di recente, quando ero specificando la direzione di ordinamento nel posto sbagliato, con il tuo esempio:

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

dovrebbe essere:

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

Grazie per la risposta, ma sì, era solo un refuso. –

+0

Questo ha risolto un problema simile che stavo affrontando – ThaDon

0

si potrebbe mettere i campi nel set di risultati. Ad esempio:

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)