Несмотря на то, что такое приведение опасно, поскольку целевой метод не гарантированно будет работать только на 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>>
, которое можно передать в ваш метод.