如何为多级引用属性(链接属性)构建表达式树?

时间:2011-06-30 05:03:31

标签: .net entity-framework expression-trees

例如,假设我有一个字符串属性“Document.DocumentType.DocumentCode”,DocumentCode是一个可以为空的十进制类型。

如何为此构建表达式树:x.Document.DocumentType.DocumentCode.GetValueOrDefault() == 4

对于我的实际情况,我不会确切地知道链接字符串属性的样子或属性级别。

1 个答案:

答案 0 :(得分:4)

嗯,那棵树是:

  • 相等匹配,左侧是复杂的,右侧是常量表达式4。
  • LHS是(表达式)
  • 上的方法调用GetValueOrDefault()
  • 上一步的表达式是(表达式)
  • 上的属性访问表达式DocumentCode
  • 上一步的表达式是(表达式)
  • 上的属性访问表达式DocumentType
  • 上一步中的表达式是Document上的属性访问表达式ParameterExpression

从底部开始,然后从那里构建它。换句话说,如果您知道自己只有财产,那么您需要:

  • 将字符串拆分为“。”
  • 创建ParameterExpression
  • 循环播放属性集,每次添加另一个图层或属性访问权限,例如

    currentExpression = Expression.Property(currentExpression, propertyName);
    
  • 在表达式

  • 中添加方法调用
  • 使用它和你给出的任何常数值建立一个相等比较