Сайт LambdaExpression и PropertyDescriptor в основном в разных мирах (к моему большому разочарованию). LambdaExpression будет интересоваться PropertyInfo, а не PropertyDescriptor.
Если у вас есть PropertyInfo, вы можете создать выражение через:
PropertyInfo prop = ...
ParameterExpression param = Expression.Parameter(prop.ReflectedType, "x");
LambdaExpression lambda = Expression.Lambda(
Expression.Property(param, prop), param);
Вы можете также пытаться разрешить по имени, но это , а не , обязательно то же самое, особенно если вы используете модель пользовательского типа (ICustomTypeDescriptor
и т. Д.):
PropertyDescriptor prop = ...
ParameterExpression param = Expression.Parameter(prop.ComponentType, "x");
LambdaExpression lambda = Expression.Lambda(
Expression.Property(param, prop.Name), param);