2010-09-09 75 views
3

我需要获取表达式参数的名称。我想要做的是类似于FluentNhibernate确实与列映射:获取表达式参数名称

地图(X => x.Name)

从此,我需要的 “名称”。

我该怎么做?

我可以这样得到x

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

但是我没能获得 “姓名”。请注意,我没有任何T可以调用的实例。 由于

回答

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

作为表达式返回object,身体将被包裹在一个转换表达。

以下应该工作。

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

(expr.Body as MemberExpression)返回null。 – alexn 2010-09-09 12:47:32

+0

我看到你更新了这个问题。当你返回对象时,将会有一个包装正文的Convert表达式,将更新答案。 – leppie 2010-09-09 12:51:06

+0

你是我的上帝,谢谢你! – alexn 2010-09-09 12:54:22