如何从lambda获取属性的全名

时间:2010-07-14 20:46:47

标签: c# lambda

我使用以下方法从任何其他对象创建SelectListItem对象:

public static SelectListItem ToSelectListItem<T, TResult, TResult2>(T obj, Expression<Func<T, TResult>> value, Expression<Func<T, TResult2>> text)
{
    string strValue = String.Empty;
    string strText = String.Empty;

    if (value != null)
          strValue = (value.Body as MemberExpression).Member.Name;

    if (text != null)
          strText = (text.Body as MemberExpression).Member.Name;
         ...
 }

我使用这样的方法:

SelectListItem item = ToSelectListItem(obj, x => x.ID, x => x.Name);

它工作正常。但是,当我从关联对象中指定属性时,我得到的是属性的名称

SelectListItem item = ToSelectListItem(obj, x => x.ID, x => x.Profile.Name);

我可以从'x =&gt;获得的属性名称x.Profile.Name'只是'名字'而我真正想要的是'Profile.Name'。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

或者您可以使用

expression.Compile().Invoke(obj)

如果您想使用Expression<>

答案 2 :(得分:0)

使用Func代替Expression&lt;&gt;

要容易得多

要操纵属性,我所要做的就是调用它:

expression.Invoke(obj);