我开始探索动态表达式,所以请帮我解决一个问题。 我有一个对象
public class Categorisation{
string Name{get;set;}
}
public class Client{
public Categorisation Categorisation{get;set;}
}
我只需要编写一个动态表达式并从Client对象中调用Categorization。 Name .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);
当然这段代码是错误的,我从分类属性调用方法Equals,而不是从分类名称调用。但是如何调用Name属性?
答案 0 :(得分:2)
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);