【问题标题】:Extract property name and nullable value from lambda expression从 lambda 表达式中提取属性名称和可为空的值
【发布时间】:2012-11-27 10:11:31
【问题描述】:

我正在使用 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。

我将如何获取这些数据并让表达式进行编译?

【问题讨论】:

  • 好的...几个小时后发现问题!由于该字段可以为空,我可以省略 .Value - 映射应为 - this.MyProperty(m => m.NumberOfDays);
  • 那么您应该将其发布为答案,然后尽可能接受。

标签: c# lambda expression-trees nullable


【解决方案1】:

请参阅这篇文章 (Retrieving Property name from lambda expression) 从表达式中提取属性名称。另请参阅this gotcha 以了解嵌套/子属性,即来自o =&gt; o.Thing1.Thing2Thing1.Thing2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多