如何为多级构建表达式树 property/child 属性
how to build expression tree for multilevel property/child property
我有以下定义对象遍历的字符串表达式
"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" 属性 值构建二进制表达式 post。
您必须创建嵌套的 属性 表达式,因为您正在寻找嵌套的 属性。
Expression bExpression = Expression.Property(Expression.Constant(obj), "B");
Expression numExpression = Expression.Property(bExpression, "num");
Console.WriteLine(Expression.Lambda<Func<int>>(numExpression).Compile()());//Prints 5
我有以下定义对象遍历的字符串表达式 "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" 属性 值构建二进制表达式 post。
您必须创建嵌套的 属性 表达式,因为您正在寻找嵌套的 属性。
Expression bExpression = Expression.Property(Expression.Constant(obj), "B");
Expression numExpression = Expression.Property(bExpression, "num");
Console.WriteLine(Expression.Lambda<Func<int>>(numExpression).Compile()());//Prints 5