深度> 1的成员访问的表达式树

Ada*_*Tal 0 c# linq lambda expression expression-trees

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; }
}
Run Code Online (Sandbox Code Playgroud)

如果我想创建一个成员访问Employee.Name的表达式树,这就是我所做的:

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

成员访问Employee.Job.Salary的等价物是什么?

Jon*_*eet 10

你需要:

var jobProperty = Expression.PropertyOrField(param, "Job");
var salaryProperty = Expression.PropertyOrField(jobProperty, "Salary");
Run Code Online (Sandbox Code Playgroud)

基本上你是Salary从评估结果中取得财产的x.Job.

如果您需要以编程方式执行此操作,则需要以下内容:

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