我正在努力将以下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
创建转换后的 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);