从表达式中获取成员名称

时间:2014-12-24 08:09:34

标签: c# asp.net asp.net-mvc linq

我有表达

{e => Convert(e.sal1)}

我想从中得到sal1。不是sal1的值。

如果我转换成员表达式中的表达式,它会给我null。

1 个答案:

答案 0 :(得分:0)

那是因为你有一个MemberExpression(sal1属性),包含在一个UnaryExpression(转换调用)中,包含在一个LambdaExpression中(' e => ...' )
获得" sal1"是:

((MemberExpression)
  ((UnaryExpression)
    ((LambdaExpression)exp).Body).Operand).Member.Name

如果你想更灵活地写这个,那么你可以去一个ExpressionVisitor:

string lastMemberName = new MyVisitor().GetLastVisitedMember(exp);

class MyVisitor : ExpressionVisitor
{
    private string memberName = "";

    public string GetLastVisitedMember(Expression exp)
    {
        Visit(exp);
        return memberName;
    }

    protected override Expression VisitMember(MemberExpression node)
    {
        memberName = node.Member.Name;
        return base.VisitMember(node);
    }
}