如何转换Linq表达式与不同的返回类型?

Leo*_*Leo 8 .net c# linq expression-trees linq-expressions

我正在努力转换以下linq表达式.

    Expression<Func<T, object>>
Run Code Online (Sandbox Code Playgroud)

以下linq表达式......

    Expression<Func<T, U>>
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,对象始终是类型U.

我知道在参数类型之间转换/转换是多么容易,但我不太清楚如何在返回类型之间进行转换.

Ani*_*Ani 8

您需要通过以下方式创建一个新表达式:

  1. 使用Expression.Convert源表达式的主体来创建结果的主体.
  2. 使用此主体并重用源表达式的参数来创建转换后的lambda表达式Expression.Lambda.

试试这个:

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

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