Inhaltsverzeichnis
Konvertieren von Strings in LINQ-Ausdrucksbäume
Komplexität mit Dynamic LINQ überwinden
Implementierung der Lösung
Beispielcode
Fazit
Heim Backend-Entwicklung C++ Wie kann Dynamic LINQ die Konvertierung von String-zu-LINQ-Ausdrucksbäumen vereinfachen?

Wie kann Dynamic LINQ die Konvertierung von String-zu-LINQ-Ausdrucksbäumen vereinfachen?

Jan 06, 2025 pm 06:11 PM

How Can Dynamic LINQ Simplify String-to-LINQ Expression Tree Conversion?

Konvertieren von Strings in LINQ-Ausdrucksbäume

In der Softwareentwicklung kann es notwendig werden, boolesche Ausdrücke zur Laufzeit anhand von Datenobjekten auszuwerten. Ein Ansatz, dies zu erreichen, besteht darin, die Ausdrücke in LINQ-Ausdrucksbäume zu konvertieren. Hier untersuchen wir eine optimierte Lösung für diese Aufgabe.

Komplexität mit Dynamic LINQ überwinden

Anstatt eine komplexe Grammatik und einen Parser zu erstellen, können wir die Dynamic LINQ-Bibliothek nutzen. Diese Bibliothek bietet eine praktische Methode zum dynamischen Kompilieren von Zeichenfolgenausdrücken in Ausdrucksbäumen.

Implementierung der Lösung

Mit Dynamic LINQ umfasst die Lösung die folgenden Schritte:

  1. Definieren Sie eine Klasse, die die gewünschten Eigenschaften enthält (z. B. Person).
  2. Erstellen Sie eine Ausdruckszeichenfolge, die die boolesche Bedingung enthält (z. B. (Person.Alter > 3 UND Person.Gewicht > 50) ODER Person.Alter < 3).
  3. Erzeugen Sie einen Ausdrucksbaum mit DynamicExpression.ParseLambda().
  4. Kompilieren Sie den Ausdrucksbaum mit Compile().
  5. Bewerten Sie den Ausdruck anhand einer Dateninstanz mit DynamicInvoke().

Beispielcode

using System;
using System.Linq.Expressions;
using System.Linq.Dynamic;

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()
    {
        const string exp = @"(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3";
        var p = Expression.Parameter(typeof(Person), "Person");
        var e = DynamicExpression.ParseLambda(new[] { p }, null, exp);
        var bob = new Person
        {
            Name = "Bob",
            Age = 30,
            Weight = 213,
            FavouriteDay = new DateTime(2000, 1, 1)
        };

        var result = e.Compile().DynamicInvoke(bob);
        Console.WriteLine(result);
        Console.ReadKey();
    }
}

Fazit

Durch die Verwendung von Dynamic LINQ können wir die Konvertierung von booleschen Ausdrücken in Ausdrucksbäume vereinfachen und das eliminieren Bedarf an einem benutzerdefinierten Parser. Diese Lösung ist sowohl effizient als auch flexibel und daher eine geeignete Wahl für die Auswertung dynamischer Ausdrücke.

Das obige ist der detaillierte Inhalt vonWie kann Dynamic LINQ die Konvertierung von String-zu-LINQ-Ausdrucksbäumen vereinfachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

See all articles