Wie kann ich eine Ausdrucksbaumstruktur erstellen, die Eigenschaften in einem untergeordneten Objekt vergleicht?

c# expression-trees lambda

Frage

Wie kann ich eine Ausdrucksbaumstruktur erstellen, die Eigenschaften in einem untergeordneten Objekt vergleicht?

Zum Beispiel kann ich bereits einen Lambda-Ausdrucksbaum erstellen, der direkte Eigenschaften eines Objekts vergleicht. So was:

var propertyName = "JobNumber";
var propertyValue = "1005";
Type entityType = typeof(ParentObject);
OperatorDelegate comparisonMethod = Expression.Equal;

var parameter = Expression.Parameter(entityType, "entity");
var lambda =
    Expression.Lambda<Func<ParentObject, bool>>(
        comparisonMethod(Expression.Property(parameter, propertyName), Expression.Constant(propertyValue)),
        parameter);

Was ist (ich glaube) äquivalent zu:

entity => entity.JobNumber == "1005";

Wo ich auflege, versuche herauszufinden, wie man Werte in den Eigenschaften eines Kindobjekts vergleicht. Zum Beispiel gegeben:

public class ParentObject
{
    public ChildObject Child { get; set; }

    // more properties of ParentObject
}

public class ChildObject
{
    public string JobNumber { get; set; }
}

Wie würde ich einen Ausdruck erstellen, der dem entspricht:

parentEntity => parentEntity.Child.JobNumber == "1005"

Danke für jede Hilfe.

Akzeptierte Antwort

Sie müssen nur die Eigenschaft des zurückgegebenen Eigenschaftswerts abrufen:

var child = Expression.Property(parameter, "Child");
var jobNumber = Expression.Property(child, propertyName);

var lambda =
    Expression.Lambda<Func<ParentObject, bool>>(
        comparisonMethod(jobNumber, Expression.Constant(propertyValue)),
        parameter);


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow