我在尝试转换以下 linq 表达式时感到头疼。
Expression<Func<T, object>>
到以下 linq 表达式...
Expression<Func<T, U>>
在上面的示例中,对象始终是类型U
。
我知道在参数类型之间转换/转换是多么容易,但我不太确定如何在返回类型之间转换。
我在尝试转换以下 linq 表达式时感到头疼。
Expression<Func<T, object>>
到以下 linq 表达式...
Expression<Func<T, U>>
在上面的示例中,对象始终是类型U
。
我知道在参数类型之间转换/转换是多么容易,但我不太确定如何在返回类型之间转换。
您需要通过以下方式创建一个新表达式:
Expression.Convert
源表达式的主体来创建结果的主体。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);
我的案例是将接口输入类型转换为我的 MongoDB 通用存储库的具体类型。
我从
Expression<Func<TIModel, bool>> iFilter
至
Expression<Func<TModel, bool>> filter
我只是从 Ani 的回答中得到启发并转换为:
var filter = Expression.Lambda<Func<TModel, bool>>(iFilter.Body, iFilter.Parameters);