如何从 lambda 表达式中获取属性的完整名称

3

我使用以下方法从任何其他对象创建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;
         ...
 }

I use this method like this:

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

它可以正常工作。然而,当我指定一个来自关联对象的属性时,我只得到了该属性的名称。

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

我能从'x => x.Profile.Name'获取的属性名称仅为'Name',而我真正想要获取的是'Profile.Name'。

如果有建议,将不胜感激。


可能是重复的问题:C#:从Lambda表达式获取链中属性的名称 - nawfal
3个回答

3

1
……而且为了一个好笑话,注意一下帖子下面的评论:“那是PHP吗?” - Jay
这篇文章帮助我找到了更好的解决方案。 - Raphael

2
或者您可以使用

expression.Compile().Invoke(obj)

如果你想使用 Expression<>


1

使用 Func 比 Expression<> 更容易。

要操作属性,我只需要调用它:

expression.Invoke(obj);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接