zoukankan      html  css  js  c++  java
  • C# 动态Lambda表达式

    借助一个强大的Nuget 包可以很方便地解析执行Lambda表达式格式的字符串:System.Linq.Dynamic.Core

    github: https://github.com/StefH/System.Linq.Dynamic.Core

    // 匿名类


    //匿名类
    var a = new { Age = 1, Name = "小姐姐" }; Type aType = a.GetType(); var dataParameter = Expression.Parameter(aType, "data"); // 定义 data => 且data类型 var expar = DynamicExpressionParser.ParseLambda(new[] { dataParameter }, typeof(bool), "data.Age > 5 && data.Name == "小哥哥""); // 字段名也可以写小写(Age == age)这一点很方便 // 执行Lambda表达式 var result = cancelExpr.Compile().DynamicInvoke(a); // outPut: false; // 等同于: var result = a.Age > 5 && a.Name == "小哥哥";

      

        public class Teach
        {
            public string Name { get; set; }
    
            public int Age { get; set; }
    
            public string AddressInfo { get; set; }
    
        }
    

      

            var list = new List<Teach>();
    
    
            for (int i = 0; i< 10; i++)
            {
                 var tearch = new Teach
                 {
                     Name = "小" + i,
                     Age = i
                 };
    
            list.Add(tearch);
    
            }
    
        Type type = typeof(Teach);
    
        var dataParameter = Expression.Parameter(type, "data");
        var expr = DynamicExpressionParser.ParseLambda(new[] { dataParameter }, typeof(bool), "data.Age > 5 && data.Name == "小6"");
        // 或者
        var expr1 = DynamicExpressionParser.ParseLambda<Teach, bool>(ParsingConfig.Default, true, "age > 5 && name == "小6"");
        var res = list.Where(t => (bool)expr.Compile().DynamicInvoke(t)).ToList();
        var res2 = list.Where(expr1.Compile()).ToList();
    

      

      

  • 相关阅读:
    Codeforces 1381B Unmerge(序列划分+背包)
    daily overview(2020.03.07update:该网站打不开惹
    矩阵相关
    颓式子
    51nod 1603 限高二叉排列树/1412 AVL树的种类
    模板合集(未完
    【luogu5651】 基础最短路练习题 [?]
    一个大Za
    【2019.11.11】
    【noip2017】
  • 原文地址:https://www.cnblogs.com/lao-tang/p/11780266.html
Copyright © 2011-2022 走看看