Как конвертировать выражение> к выражению> - PullRequest
0 голосов
/ 05 апреля 2019

Я динамически создаю выражение, которое передаю в какой-то метод, но этот метод принимает это выражение по-другому. Выдает исключение:

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

Я попробовал ответ от Использование Expression для «преобразования» Func в Func , но это не работает для меня.

Мое выражение лица

Expression<Func<CustomerViewModel, string>> 

но я хочу результат как

Expression<Func<object, string>>

1 Ответ

0 голосов
/ 05 апреля 2019

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

...