表达式树深度的制造&gt成员访问; 1 [英] Expression tree for a member access of depth > 1

查看:193
本文介绍了表达式树深度的制造&gt成员访问; 1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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; }
}

如果我想创建的一员获得员工的表达式树。名称这是我做的:

If I want to create an expression tree of a member access to Employee.Name this is what I do:

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



什么是相当于本作的成员访问Employee.Job.Salary?

What is the equivalent to this for a member access to Employee.Job.Salary ?

推荐答案

您需要:

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



基本上你正在做的薪酬属性从评估的结果 x.Job

如果你需要做这以编程的方式,你'会需要这样的东西:

If you need to do this in a programmatic way, you'll need something like:

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

这篇关于表达式树深度的制造&gt成员访问; 1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆