从NewExpression成员获取链中属性的名称

时间:2015-12-29 16:12:24

标签: c# reflection lambda linq-expressions

假设这个表达式:

Expression<Func<DateTime, dynamic>> exp = dt => new { dt.Second, dt.Hour, dt.Date.Day };

我需要获得以下内容:"Second", "Hour", "Date.Day"

我能够取得的最好成绩如下:

var body = exp.Body as NewExpression;
foreach(var member in body.Members)
    member.Name().Dump();

但我只得到:"Second", "Hour", "Day"

这有点类似于this question但我在这里处理的是NewExpression。

1 个答案:

答案 0 :(得分:2)

也许您可以尝试使用Arguments代替Members

var body = exp.Body as NewExpression;
foreach (var member in body.Arguments)
{
    Console.WriteLine(member);
}

输出是:

dt.Second
dt.Hour
dt.Date.Day