With a string of powerful Nuget package can be easily analyzed and executed Lambda expressions format: System.Linq.Dynamic.Core
github: https://github.com/StefH/System.Linq.Dynamic.Core
// anonymous class
// anonymous class
var a = new {Age = 1 , Name = " little sister"}; Type aType = a.GetType(); var dataParameter = Expression.Parameter (aType, "data"); // define data => data type and var expar = DynamicExpressionParser.ParseLambda (new [] {dataParameter}, typeof (bool), "data.Age> 5 && data.Name == \" little brother \ ""); // field name may be written in lower case (Age == age) it is very convenient // Perform Lambda expressions var result = cancelExpr.Compile().DynamicInvoke(a); // outPut: false; // equivalent to: var result = a.Age> 5 && a.Name == "little brother";
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\""); // or 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();