come costruire un albero di espressioni per proprietà multilivello / proprietà figlio

c# expression expression-trees

Domanda

Ho la seguente espressione di stringa che definisce l'oggetto traversale "eBnum". dove e definisce l'entità radice nella mia espressione di stringa

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

}

Nella seguente istruzione Expression.Property (Expression.Constant (obj), "num"); Sono in grado di ottenere il valore per la proprietà di primo livello "campione" ma non per la proprietà di secondo livello?

Mi sto perdendo qualcosa qui? Sto cercando di costruire un'espressione binaria postare questo in base al valore della proprietà "num".

Risposta accettata

Devi creare un'espressione di proprietà nidificata mentre stai cercando la proprietà nidificata.

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

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché