Деревья выражений предназначены для выполнения фиксированной операции - в частности, при доступе к члену будет требоваться известный MemberInfo
(и т. Д.) В точке создания дерева выражений (поскольку они неизменяемы).
Вы можете продублировать сгенерированный код из dynamic
, если вы играете с 4.0, но, честно говоря, лучший подход в этом сценарии прост: не используйте дерево выражений.
Либо отражение, либо ComponentModel
(TypeDescriptor
) были бы идеальными для этого динамического доступа к члену.
Также - вызов Compile
для чего-то, что вы используете только один раз, не экономит время, и использование DynamicInvoke
также не выгодно ... вам нужно использовать типизированную форму делегата (Invoke
).