如何将表达式<Func<TSource,string>> 转换为表达式<Func<object,string>>

How to convert Expression<Func<TSource,string>> to Expression<Func<object,string>>

我正在动态创建一个表达式,我将其传递给某个方法,但该方法以不同的方式接受该表达式。它抛出异常:

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>>

尽管这样的转换是危险的,因为目标方法不能保证只在 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);

其中 inputExpressionExpression<Func<CustomerViewModel, string>> 类型的原始表达式,outputExpressionExpression<Func<object, string>> 类型的新表达式,可以传递给您的方法。