Come convertire tra espressioni Linq con diversi tipi di ritorno?

.net c# expression-trees linq linq-expressions

Domanda

Sto avendo un mal di testa cercando di convertire la seguente espressione di linq.

    Expression<Func<T, object>>

alla seguente espressione linq ...

    Expression<Func<T, U>>

Nell'esempio sopra l'oggetto è sempre di tipo U

So quanto è facile convertire / eseguire il cast tra tipi di parametri, ma non sono sicuro di come eseguire il cast tra i tipi restituiti.

Risposta accettata

Dovrai creare una nuova espressione da:

  1. Uso di Expression.Convert il corpo dell'espressione di origine per creare il corpo del risultato.
  2. Utilizzare questo corpo e riutilizzare i parametri dell'espressione sorgente per creare l'espressione lambda trasformata con Expression.Lambda .

Prova questo:

Expression<Func<T, object>> source = ...

var resultBody = Expression.Convert(source.Body, typeof(U));    
var result = Expression.Lambda<Func<T, U>>(resultBody, source.Parameters);


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché