Оценка Linq Expression - PullRequest
       0

Оценка Linq Expression

0 голосов
/ 23 марта 2011

У меня есть функция, которая принимает Expression<Func<T>> в качестве аргумента и возвращает пользовательский класс

MyExpressionInfo GetExpressionInfo<T>(Expression<Func<T>> expression)

Для любого выражения, с предположением, что выражение «указывает на» свойство, как я могуполучите PropertyInfo для конечного свойства в выражении и экземпляра объекта, который имеет это PropertyInfo.

Примеры

var info = GetExpressionInfo(myObject.AProperty);
var info2 = GetExpressionInfo(GetSomething().AProperty);
var info3 = GetExpressionInfo(GetSomethingElse().AProperty.GetThirdThing().AProperty);

Так что в приведенном выше примере я хочу, чтобы результат был

  • myObject в качестве ссылки, PropertyInfo для AProperty в качестве свойства
  • Результат GetSomething () в качестве ссылки, PropertyInfo для AProperty в качестве свойства
  • Результат GetSomethingElse ().AProperty.GetThirdThing () в качестве ссылки

Я могу сделать первую часть, получая PropertyInfo следующим образом:

        MemberExpression memberExpression = (MemberExpression)expression.Body;
        PropertyInfo boundPropertyInfo = memberExpression.Member as PropertyInfo;

        if (boundPropertyInfo == null)
            throw new ApplicationException("Bound expression does not resolve to a Property");

Как мне получить разрешение для значения для остальной частивыражение

...