代码之家  ›  专栏  ›  技术社区  ›  Raphael

如何从lambda获取属性的全名

  •  3
  • Raphael  · 技术社区  · 16 年前

    我使用以下方法从任何其他对象创建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=>x.profile.name”只能是“name”,我真正想要的是“profile.name”。

    任何建议都将不胜感激。

    3 回复  |  直到 11 年前
        1
  •  2
  •   Marijn    13 年前

    或者你可以使用

    expression.Compile().Invoke(obj)
    

    如果你想用 Expression<>

        2
  •  2
  •   Jay    16 年前
        3
  •  0
  •   Raphael    16 年前

    使用func要比使用expression简单得多<gt;

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

    expression.Invoke(obj);