csharp 使用表达式树生成运行时代码(对象比较器)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 使用表达式树生成运行时代码(对象比较器)相关的知识,希望对你有一定的参考价值。

using System;
using System.Linq;
using System.Linq.Expressions;

namespace ConsoleApplication1
{
    public class Foo
    {
        public int A { get; set; }
        public Bar Bar;
    }

    public class Bar
    {
        public int? B { get; set; }
    }

    class Program
    {
        static Func<object, bool> GenerateComparer(Type valueType, string propertyPath, string targetValue)
        {
            var argumentParameter = Expression.Parameter(typeof(object), "argument");
            return Expression.Lambda<Func<object, bool>>(
                        Expression.Equal(
                            Expression.Call(
                                propertyPath.Split('.').Aggregate<string, Expression>(Expression.Convert(argumentParameter, valueType), Expression.PropertyOrField),
                                typeof(object).GetMethod("ToString")),
                            Expression.Constant(targetValue)),
                    argumentParameter)
                   .Compile();
        }

        static void Main()
        {
            var foo = new Foo { A = 43, Bar = new Bar { B = 10 } };
            Console.WriteLine(GenerateComparer(typeof(Foo), "A", "43")(foo));
            Console.WriteLine(GenerateComparer(typeof(Foo), "Bar.B", "10")(foo));
        }
    }
}

以上是关于csharp 使用表达式树生成运行时代码(对象比较器)的主要内容,如果未能解决你的问题,请参考以下文章

csharp 使用Google API生成QR码

csharp 使用Google API生成QR码

如何构建与通用对象进行比较的 Linq 表达式树?

自己动手写ORM(01):解析表达式树生成Sql碎片

csharp 表达树穗

csharp 表达树穗