我正在努力转换以下linq表达式。
Expression<Func<T, object>>
以下linq表达式...
Expression<Func<T, U>>
在上面的示例中,对象始终为U
类型。
我知道在参数类型之间进行转换/转换是多么容易,但我不太清楚如何在返回类型之间进行转换。
答案 0 :(得分:8)
您需要通过以下方式创建新表达式:
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);
答案 1 :(得分:0)
我的案例是将接口输入类型转换为MongoDB通用存储库的具体类型。
我正在从中转换
Expression<Func<TIModel, bool>> iFilter
到
Expression<Func<TModel, bool>> filter
我只是从Ani的答案中得到启发,并像这样转换:
var filter = Expression.Lambda<Func<TModel, bool>>(iFilter.Body, iFilter.Parameters);
答案 2 :(得分:-1)
一个具体的例子在这里会有所帮助,但我怀疑在linq select语句中转换对象(通过强制转换)将完成你需要做的工作。