2013-04-05 17 views
7

Ho bisogno di un piccolo pezzo di magia. Credo che quello che sto cercando di fare abbia senso, ma se non ho visto un problema con il piano, i motivi per cui sarebbe stato il benvenuto.Espressione cast lambda in tipo derivato

Ho un'espressione

Expression<Func<Entity, bool>>

e voglio lanciare/convertire o persino creare una nuova espressione:

Expression<Func<Derived, bool>>

Questo viene utilizzato come una query di filtro EF , passato come argomento a un metodo di repository. Il repository restituisce un'enumerabile di Entity, quindi potrei usare la covarianza abbastanza facilmente, ma voglio fare qualche post processing sulla query nel suo stato derivato prima di restituirlo.

Mi sembra che EF debba eseguirlo internamente, ma mi piacerebbe poter eseguire la mia query in modo che il tipo del risultato sia Tipo derivato piuttosto che Entità.

Grazie per l'aiuto.

+2

Che cosa succede se si aggiunge un cast alla tua richiesta? –

+0

Non sono sicuro che si tratti di un duplicato, ma è decisamente molto simile a [questa domanda] (http://stackoverflow.com/q/2797261/50079) della mia. – Jon

+0

Argh dannazione. Ero spesso. Grazie per aver segnalato l'emorragia ovvia. – MJM

risposta

3

Se hai la tua espressione Expression<Func<Entity, bool>> puoi aggiungere un Cast<Derived> ad esso per filtrare verso il basso a tutte le entità che sono di quel tipo specifico.

3

Lavorando sul piano Expression, è possibile costruire una nuova espressione avere il tipo Derived come parametro:

var entityExpr = (Expression<Func<Entity, bool>>)(e => e.Str == ""); 
var derivedExpr = Expression.Lambda<Func<Derived, bool>>(entityExpr.Body, entityExpr.Parameters); 
Problemi correlati