comment construire un arbre d'expression pour une propriété multiniveau / une propriété enfant

c# expression expression-trees

Question

J'ai l'expression de chaîne suivante définissant la traversée d'objet "eBnum". où e définit l'entité racine dans l'expression de chaîne

 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()());

}

Sur la déclaration ci-dessous Expression.Property (Expression.Constant (obj), "num"); Je suis en mesure d'obtenir la valeur pour la propriété de premier niveau "échantillon" mais pas pour la propriété de second niveau?

Est-ce que j'ai râté quelque chose? J'essaie de créer une expression binaire en fonction de la valeur de la propriété "num".

Réponse acceptée

Vous devez créer une expression de propriété imbriquée lorsque vous recherchez une propriété imbriquée.

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

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi