Получение родительского члена из выражения

У меня есть выражение , которое используется для получения списка элементов. из моей Моделидля моего Вида. То, что я хочу сделать, дано Expressionдля List, могу ли я вернуться назад вверх по дереву выраженийна один уровень, чтобы получить родительский узел?

Допустим, это моя модель представления:

public class MyModel {
   public MyClass myClass { get; set;}
}

...

public class MyClass {
   public List<string> MyList { get; set;}
}

У меня есть HtmlHelper, который принимает Expressionследующим образом для отображения списка на странице:

public static MvcHtmlString RenderList(this HtmlHelper<TModel> html, Expression<Func<TModel, IEnumerable<TItem>>> dataExpression)
{   
     var list = dataExpression.Compile()(html.ViewData.Model);

     ...

     return MvcHtmlString.Create(...);
}

Я вызываю своего помощника следующим образом:

@model MyNamespace.Models.MyModel
@Html.RenderList(m => m.myClass.MyList)

Все работает нормально, мой вопрос в том, могу ли я взять заданное Выражение, которое указывает на Список<строка>и получить это родительский узел ( MyClass), затем скомпилируйте его с моей Model, чтобы получить его значение. Таким образом, эквивалент этого Выражение :

m => m.myClass

Вот что я пробовал:

// This gets the correct expression
var exp = ((MemberExpression)this._dataExpression.Body).Expression;
// Create a parameter representing the type of the Model ?
var parameter = Expression.Parameter(typeof(TModel));
// Create lambda
var lambda = Expression.Lambda<Func<TModel, dynamic>>(exp, parameter);
// Try and compile against the view model
var obj = lambda.Compile()(html.ViewData.Model);
5
задан Gabe 19 March 2012 в 20:35
поделиться