如何为多级属性/子属性构建表达式树

时间:2015-08-19 08:28:04

标签: c# expression expression-trees

我有以下字符串表达式定义对象遍历 “e.B.num”。其中e定义了我的字符串表达式中的根实体

 class BTest
 {      
    public int num{get:set;}
 }

 class Test
 {
     public int sample {get; set;}
     public BTest B {get; set;} 
 }

 static void TestProperty()
 {
    Test obj = new Test();
    obj.sample = 40;
    obj.B = new BTest(){ num=5}

    Expression propertyExpr = Expression.Property(Expression.Constant(obj),"num");

    Console.WriteLine(Expression.Lambda<Func<int>>(propertyExpr).Compile()());

}

在下面的语句Expression.Property(Expression.Constant(obj),“num”);我能够获得第一级属性“sample”的值,但不能获得第二级属性的值吗?

我在这里遗漏了什么吗?我正在尝试根据“num”属性值构建一个二进制表达式。

1 个答案:

答案 0 :(得分:5)

您必须创建嵌套属性表达式,因为您正在寻找嵌套属性。

Expression bExpression = Expression.Property(Expression.Constant(obj), "B");
Expression numExpression = Expression.Property(bExpression, "num");

Console.WriteLine(Expression.Lambda<Func<int>>(numExpression).Compile()());//Prints 5