How to convert between Linq expressions with different return types?

.net, c#, expression-trees, linq, linq-expressions

Solution

You'll need to create a new expression by:

- Using `Expression.Convert` over the source expression's body to create the result's body.

- Using this body and reusing the parameters of the source expression to create the transformed lambda expression with `Expression.Lambda`.

Try this:

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

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

Problem

I'm having a headache trying to convert the following linq expression. ``` Expression<Func<T, object>> ``` to the following linq expression... ``` Expression<Func<T, U>> ``` In the example above the object is always of type `U`. I know how easy it could to convert/cast between parameter types but I'm not too sure how to cast between return types.

Original source

Related problems