我正在动态创建一个表达式,并将其传递给某种方法,但是该方法以不同的方式接受该表达式。它引发异常:
Object of type
'System.Linq.Expressions.Expression`1[System.Func`2[Common.Domain.ViewModels.Dealer.CustomerGridViewModel,System.String]]'
cannot be converted to type
'System.Linq.Expressions.Expression`1[System.Func`2[System.Object,System.String]]'
我已经尝试过Using Expression to 'Cast' Func<object, object> to Func<T, TRet>的答案,但这对我不起作用。
我的表情是
Expression<Func<CustomerViewModel, string>>
但我希望结果为
Expression<Func<object, string>>
答案 0 :(得分:0)
尽管这样的转换很危险,因为不能保证仅在CustomerViewModel
上运行目标方法,下面的代码使适配器表达式接受Object
类型的参数,尝试进行转换将其传递到CustomerViewModel
并在内部调用原始表达式:
var objParam = Expression.Parameter(typeof(object));
var call = Expression.Invoke(inputExpression, Expression.Convert(objParam, typeof(Foo)));
var outputExpression = Expression.Lambda<Func<object, string>>(call, objParam);
其中inputExpression
是类型Expression<Func<CustomerViewModel, string>>
的原始表达式,而outputExpression
是类型Expression<Func<object, string>>
的新表达式,可以传递给您的方法。