LINQ-Ausdrücke aus Strings dynamisch auswerten
Problem:
Gegeben sei eine Eingabezeichenfolge, die a darstellt LINQ-Ausdruck, z. B. „(Person.Age > 3 AND Person.Weight > 50)“ OR Person.Age < 3", das Ziel besteht darin, dynamisch eine Func
Überbackener Ansatz:
Die vorgeschlagene Lösung mit ANTLR-Grammatik und dem Predicate Builder-Framework kann unnötig komplex sein.
Alternative Lösung: Dynamisch LINQ
Die Dynamic LINQ-Bibliothek bietet eine elegante und unkomplizierte Lösung. So verwenden Sie es:
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(); } } }
In diesem Beispiel analysieren wir die Ausdruckszeichenfolge dynamisch in einen Lambda-Ausdruck und kompilieren ihn dann in einen Func Vorteile von Dynamic LINQ: Hinweis: Denken Sie daran, das anzugeben System.Linq.Dynamic Nuget-Paket, damit dieser Code funktioniert. Das obige ist der detaillierte Inhalt vonWie kann ich LINQ-Ausdrücke aus Strings in C# dynamisch auswerten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!