Ausdrucksbaum für einen Mitgliedszugriff der Tiefe> 1

c# expression expression-trees lambda linq

Frage

public class Job
{
    public string Name { get; set; }
    public int Salary { get; set; }
}
public class Employee
{
    public string Name { get; set; }
    public Job Job { get; set; }
}

Wenn ich einen Ausdrucksbaum eines Mitgliederzugriffs auf Employee.Name erstellen möchte, mache ich Folgendes:

        var param = Expression.Parameter(type, "x");
        var memberAccess = Expression.PropertyOrField(param, memberName);
        return Expression.Lambda<Func<TModel, TMember>>(memberAccess, param);

Was ist für einen Mitgliederzugriff auf Employee.Job.Salary gleichzusetzen?

Akzeptierte Antwort

Du brauchst:

var jobProperty = Expression.PropertyOrField(param, "Job");
var salaryProperty = Expression.PropertyOrField(jobProperty, "Salary");

Im Grunde nehmen Sie die Salary Eigenschaft aus dem Ergebnis der Auswertung von x.Job .

Wenn Sie dies auf programmatische Weise tun müssen, benötigen Sie Folgendes:

Expression expression = Expression.Parameter(type, "x");
foreach (var property in properties.Split('.'))
{
    expression = Expression.PropertyOrField(expression, property);
}


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