Heim > Backend-Entwicklung > C++ > Wie kann ich LINQ-Ausdrücke aus Strings in C# dynamisch auswerten?

Wie kann ich LINQ-Ausdrücke aus Strings in C# dynamisch auswerten?

Barbara Streisand
Freigeben: 2025-01-06 18:25:40
Original
423 Leute haben es durchsucht

How can I dynamically evaluate LINQ expressions from strings in C#?

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 zu erstellen. das kann anhand einer Instanz der Person-Klasse ausgewertet werden.

Ü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();
        }
    }
}
Nach dem Login kopieren

In diesem Beispiel analysieren wir die Ausdruckszeichenfolge dynamisch in einen Lambda-Ausdruck und kompilieren ihn dann in einen Func. Anschließend können wir die Funktion anhand einer Personeninstanz bewerten, um festzustellen, ob sie den angegebenen Kriterien entspricht.

Vorteile von Dynamic LINQ:

  • Einfach Verwendung: Einfache API, die die dynamische Erstellung von LINQ-Ausdrücken ermöglicht Zeichenfolgen.
  • Vielseitigkeit: Unterstützt eine breite Palette von Ausdrucksoperatoren und -typen.
  • Leichtgewicht: Enthält nur die notwendige Funktionalität zum Parsen und Auswerten von Ausdrücken .

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage