从类的对象的属性动态表达(Dynamic Expression from the Property

2019-10-17 11:45发布

我开始探索动态表情,所以请帮我解决一个问题。 我有一个对象

    public class Categorisation{
       string Name{get;set;}
    }

    public class Client{
       public Categorisation Categorisation{get;set;}
}

所有我需要的是写一个动态表情和呼叫分类。 从客户对象名称 .Equals( “A1”)。

x=>x.Categorisation.Name.Equals("A1")

我怎样才能做到这一点使用表达式?

   var param = Expression.Parameter(typeof(Client));
   var prop = Expression.Property(param, typeof(Client).GetProperty("Categorisation"));
   var argument = Expression.Constant("A1");
   var method = typeof(string).GetMethod("Equals", new[] { typeof(string) });
   var call = Expression.Call(prop, method);
   var expr = Expression.Lambda<Func<Client, bool>>(call, param);

当然,这个代码是错误的,我所说的方法,从分类属性等于,而不是从分类的名称。 但如何调用Name属性?

Answer 1:

var param = Expression.Parameter(typeof(Client));
var prop = Expression.Property(param, typeof(Client).GetProperty("Categorisation"));
var namePropExpr = Expression.Property(prop, "Name");
var argument = Expression.Constant("A1");
var method = typeof(string).GetMethod("Equals", new[] { typeof(string) });
var call = Expression.Call(namePropExpr, method, argument);
var expr = Expression.Lambda<Func<Client, bool>>(call, param);


文章来源: Dynamic Expression from the Property of the object of the class
标签: c# lambda