从字符串动态计算 LINQ 表达式
问题:
给定一个表示LINQ 表达式,例如“(Person.Age > 3 AND Person.Weight > 50) OR Person.Age 可以针对 Person 类的实例进行评估。
过度烘焙的方法:
涉及 ANTLR 语法和谓词生成器框架的建议解决方案可能不必要地复杂。
替代解决方案:动态LINQ
动态 LINQ 库提供了一个优雅且简单的解决方案。使用方法如下:
using System; using System.Linq.Expressions; using System.Linq.Dynamic; namespace ExpressionParser { class Program { public class Person { public string Name { get; set; } public int Age { get; set; } public int Weight { get; set; } public DateTime FavouriteDay { get; set; } } static void Main() { // Input expression string const string exp = @"(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3"; // Compile expression into a lambda expression var p = Expression.Parameter(typeof(Person), "Person"); var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p }, null, exp); // Create a Person instance var bob = new Person { Name = "Bob", Age = 30, Weight = 213, FavouriteDay = new DateTime(2000, 1, 1) }; // Evaluate expression against the Person instance var result = e.Compile().DynamicInvoke(bob); // Print result Console.WriteLine(result); Console.ReadKey(); } } }
在这个例子中,我们动态地将表达式字符串解析为 lambda 表达式,然后将其编译为 Func
动态 LINQ 的好处:
注意:记得包含System.Linq.Dynamic nuget 包使此代码能够工作。
以上是如何从 C# 中的字符串动态计算 LINQ 表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!