从lambda表达式中提取属性名称和可空值

时间:2012-11-27 10:11:32

标签: c# lambda expression-trees nullable

我正在使用lambda表达式,需要提取属性名称和值:

  public MyMapping(Expression<Func<TEntity, int?>> expression)
    {
        this.expression = expression;

        if (this.expression != null)
        {
            if (expression.Body is MemberExpression)
            {
                this.expressionMemberName = ((MemberExpression)expression.Body).Member.Name;
            }
            else
            {
                var op = ((UnaryExpression)expression.Body).Operand;
                this.expressionMemberName = ((MemberExpression)op).Member.Name;
            }          
        }
    }

表达式设置如下:

this.MyProperty(m => m.NumberOfDays.Value);

我想要以下内容:

 var propertyName = this.expressionMemberName;

 var value = this.expression.Compile()(instance);

因为我的属性可以为空,所以在尝试编译表达式时会出现异常。 propertyName也设置为“Value”而不是NumberOfDays。

如何获取此数据并使表达式进行编译?

1 个答案:

答案 0 :(得分:0)

请参阅此帖子(Retrieving Property name from lambda expression)以从Expressions中提取属性名称。另请参阅this gotcha了解嵌套/子属性,即来自Thing1.Thing2的{​​{1}}。