2010-07-14 51 views
3

我用下面的方法來從任何其他對象創建SelectListItem對象獲取屬性的全名:如何從一個lambda

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」只'名字',我真正想得到的是'Profile.Name'。

任何建議,將不勝感激。

+0

可能重複的[C#:從lambda表達式獲取鏈中的屬性的名稱](http://stackoverflow.com/questions/1667408/c-getting-names-of-properties-從lambda表達式) – nawfal 2013-04-27 16:32:57

回答

2

或者你可以使用

expression.Compile().Invoke(obj) 

如果你想使用Expression<>

0

它更容易使用的,而不是表達Func鍵<>

要操作特性的所有我需要做的就是調用它:

expression.Invoke(obj); 
相關問題