从类的对象的属性动态表达 [英] Dynamic Expression from the Property of the object of the class

查看:54
本文介绍了从类的对象的属性动态表达的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开始研究动态表达式,所以请帮助我解决一个问题. 我有一个物体

i'm starting to explore dynamic expressions, so please help me to solve one issue. I have an object

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

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

我只需要编写一个动态表达式并调用Categorisation.名称.从Client对象中返回Equals("A1").

All I need is to write a dynamic expression and call Categorisation.Name.Equals("A1") from Client object.

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

如何使用表达式来做到这一点?

How can I do this using Expressions?

   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属性?

Of course this code is wrong and I call method Equals from Categorisation property and not from Name of Categorisation. But how to invoke Name property?

推荐答案

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

这篇关于从类的对象的属性动态表达的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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