2016-03-29 4 views
0

Ich versuche, das Ergebnis einer Abfrage zu erhalten, die als Teil einer Sequenz von Aktionen als Parameter an DBIO.sequence() -Methode von Slick 3.0 ausgeführt wird. Unten ist das Code-Snippet für dasselbe.Ergebnis von einer Datenbanksequenz in Slick 3.0.0 erhalten

val query = for { 
(tt, th) <- tmpTrades join TableQuery[TrdHeader] on (_.tradeNum === _.tradeNum) 
} yield (tt.tradeNum, th.internalInd, th.tradeStatusInd, th.tradeDt, th.tradeInputDt, th.lastModifyDt) 

val queryAction = query.result 

val actions = Seq(tmpTrades.schema.create, tmpTrades ++= trades.toSeq: _*, queryAction, tmpTrades.schema.drop) 

val resultFuture = db.run(DBIO.sequence(actions)) 

Ich möchte das Ergebnis DBIO.sequence (Aktionen) als Tupel von sechs Attribute auf die Ausbeute Klausel der Abfrage entspricht, und weisen Sie Variable resultFuture. Wie kann ich dasselbe erreichen?

Danke.

Antwort

0

sollten Sie flatMap anstelle von DBIO.sequence:

val myAction = tmpTrades.schema.create.flatMap { _ => 
    tmpTrades ++= trades.toSeq 
}.flatMap { _ => 
    queryAction 
}.flatMap { queryResult => 
    // Return the result at the end. 
    tmpTrades.schema.drop.map { _ => queryResult } 
} 

db.run(myAction.transactionally) 

Oder das Gleiche wie ein for-yield:

val myAction = for { 
    _ <- tmpTrades.schema.create 
    _ <- (tmpTrades ++= trades.toSeq) 
    queryResult <- queryAction 
    _ <- tmpTrades.schema.drop 
} yield queryResult 

db.run(myAction.transactionally)