¿Cómo convertir entre expresiones Linq con diferentes tipos de retorno?

.net c# expression-trees linq linq-expressions

Pregunta

Tengo un dolor de cabeza al intentar convertir la siguiente expresión de linq.

    Expression<Func<T, object>>

a la siguiente expresión de linq ...

    Expression<Func<T, U>>

En el ejemplo anterior, el objeto es siempre de tipo U

Sé lo fácil que podría convertir / convertir entre tipos de parámetros, pero no estoy muy seguro de cómo convertir entre tipos de retorno.

Respuesta aceptada

Tendrá que crear una nueva expresión por:

  1. Usando Expression.Convert sobre el cuerpo de la expresión fuente para crear el cuerpo del resultado.
  2. Usando este cuerpo y reutilizando los parámetros de la expresión fuente para crear la expresión lambda transformada con Expression.Lambda .

Prueba esto:

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

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow