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

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM