Построение выражения из другого выражения в C#

#c# #expression

#c# #выражение

Вопрос:

У меня есть список Expression<Func<TRightModel, object>> , из которого мне нужно составить список Expression<Func<TMiddleModel, object>>

У меня есть свойство TMiddleModel.RightModel , которое дает значение RightModel данного MiddleModel . Я попробовал этот подход:

 Expression<Func<TMiddleModel, object>> f = model =>
p.Compile().Invoke(model.GetRightModel());
 

(p — это Expression<Func<RightModel, object>> ).

Это компилируется нормально, но поскольку пользователю ‘f’ необходимо просмотреть выражение, оно завершается с ошибкой во время выполнения.

Не удалось найти никакого решения этой проблемы в Google. Есть какие-нибудь идеи?

Комментарии:

1. Взгляните на статические методы в Expression

2. Вам нужно будет вручную создать новое дерево выражений из старого, возможно, используя посетителя, и заменяя каждое вхождение model на InvocationExpression for model.GetRightModel() .