2010-09-09 5 views
3

Je dois obtenir le nom d'un paramètre d'expression. Ce que je veux faire est similaire à ce que FluentNhibernate fait avec la cartographie de la colonne:Obtenir le nom du paramètre d'expression

Carte (x => x.Name)

De là, j'ai besoin "Nom".

Comment faire?

je peux obtenir x en faisant ceci:

Expression<Func<User, object>> exp = x => x.Id; 
exp.Parameters[0].Name; 

Mais je ne suis pas en mesure d'obtenir "Nom". Notez que je n'ai aucune instance de T sur laquelle je peux invoquer. Merci

Répondre

7
(expr.Body as MemberExpression).Member.Name 

Comme l'expression retourne object, le corps sera enveloppé dans une expression Convert.

Ce qui suit devrait fonctionner.

((expr.Body as UnaryExpression).Operand as MemberExpression).Member.Name 
+0

(expr.Body en tant que MemberExpression) renvoie null. – alexn

+0

Je vous vois mis à jour la question. Comme vous retournez un objet, il y aura une expression Convertir envelopper le corps, mettra à jour la réponse. – leppie

+0

Vous êtes mon dieu en ce moment, merci pour cela! – alexn