2010-07-14 5 views
3

J'utilise la méthode suivante pour créer un objet SelectListItem de tout autre objet:Comment obtenir le nom complet de la propriété d'un 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; 
     ... 
} 

J'utilise cette méthode comme ceci:

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

Et ça marche bien. Cependant, quand je précise une propriété d'un objet associé tout ce que je reçois est le nom de la propriété

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

Le nom de la propriété, je suis en mesure d'obtenir de « x => x.Profile.Name » est seulement ' Nom 'et ce que je voulais vraiment obtenir était' Profile.Name '.

Toutes les suggestions seraient appréciées.

+0

duplication possible de [C#: obtention de noms de propriétés dans une chaîne à partir de l'expression lambda] (http://stackoverflow.com/questions/1667408/c-getting-names-of-properties- en-chaîne-de-lambda-expression) – nawfal

Répondre

2

Ou vous pouvez utiliser

expression.Compile().Invoke(obj) 

si vous souhaitez utiliser Expression<>

0

Il est beaucoup plus facile à utiliser Func au lieu d'expression <>

Pour manipuler la propriété tout ce que je dois faire est de l'invoquer:

expression.Invoke(obj); 
Questions connexes