我在尝试转换以下 linq 表达式时感到头疼。
Expression<Func<T, object>>
到下面的 linq 表达式...
Expression<Func<T, U>>
在上面的示例中,对象始终是 U
类型。
我知道在参数类型之间进行转换/转换是多么容易,但我不太确定如何在返回类型之间进行转换。
最佳答案
您需要通过以下方式创建一个新表达式:
- 使用
Expression.Convert
在源表达式的主体上创建结果的主体。 - 使用这个主体并重新使用源表达式的参数来创建带有
Expression.Lambda
的转换后的 lambda 表达式.
试试这个:
Expression<Func<T, object>> source = ...
var resultBody = Expression.Convert(source.Body, typeof(U));
var result = Expression.Lambda<Func<T, U>>(resultBody, source.Parameters);
关于c# - 如何在具有不同返回类型的 Linq 表达式之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13505650/