Ausdrucksbaum

asp.net c# expression-trees

Frage

Mein Verständnis von Ausdrucksbaum ist:

Ausdrucksbäume sind Ausdrücke im Speicher wie arithmetische oder boolesche Ausdrücke. Die Ausdrücke werden in der geparsten Struktur gespeichert. So können wir leicht in jede andere Sprache übersetzen.

Linq to SQL verwendet Ausdrucksbaum.Normalerweise übersetzt der Compiler in der LINQ to SQL Abfrage ihn in analysierte Ausdrucksbäume. Diese werden als T-SQL-Anweisungen an Sql Server übergeben. Der Sql-Server führt die T-SQL-Abfrage aus und sendet das Ergebnis zurück. Wenn Sie LINQ to SQL ausführen LINQ to SQL Sie deshalb IQueryable<T> nicht IEnumetrable<T> .Weil IQuerybale enthält

public IQueryable:IEnumerable
{

   Type Element {get;}
   Expression Expression {get;}
   IQueryaleProvider Provider {get;}
}

Fragen :

  1. Microsoft verwendet Expression-Bäume, um mit LINQ-to-Sql zu spielen. Welche Möglichkeiten gibt es, wie ich Expression-Bäume verwenden kann, um meinen Code zu verbessern?

  2. Abgesehen von LINQ to SQL, Linq zu Amazon, die Expression-Bäume in ihren Anwendungen verwendet?

  3. Linq to Object gibt IEnumerable zurück, Linq an SQL return IQueryable, Was gibt LINQ an XML zurück?

Akzeptierte Antwort

Ausdrucksbäume bieten eine Möglichkeit, einen Teil des Codes vor der eigentlichen Kompilierung zur Laufzeit zu untersuchen.

Sie können mit einem Ausdrucksbaum genau zwei Dinge tun:

  • Kompilieren Sie es mithilfe von Expression.Compile oder
  • Besuchen Sie die Baumknoten und generieren Sie daraus etwas anderes (zB eine SQL-Anweisung).

Expression-Bäume sind cool, aber die Chancen, dass sie tatsächlich eine direkte Nützlichkeit für eine typische Website oder Unternehmens-App haben, sind weit entfernt. Sie würden sie nur verwenden, wenn Sie (a) zur Laufzeit einen anderen Codetyp aus der C # -Quelle generieren möchten oder (b) Reflection verwenden möchten, aber ein gewisses Maß an Kompilierzeitsicherheit bieten.

Wenn Sie an wiederverwendbaren Bibliotheken - DI-Frameworks, AOP-Frameworks, MVC / MVP / MVVM-Frameworks, ORM-Frameworks usw. - arbeiten oder versuchen, eines dieser Frameworks (einschließlich Linq-to-XYZ) zu erweitern, werden Sie wahrscheinlich feststellen eine Verwendung für Ausdrucksbäume (wie die Linq to SQL- Stapelaktualisierungserweiterung ), obwohl es schwierig ist, bestimmte Beispiele zu diskutieren, da dies vollständig vom Design eines solchen Frameworks abhängen würde.

Wenn Sie diese Art von Werkzeugen nicht bauen, sind Ausdrucksbäume nicht viel mehr als eine Kuriosität. Natürlich ist es toll, etwas darüber zu lernen - aber seien Sie nicht enttäuscht, wenn Sie nicht zu viele praktische Anwendungen für sie finden.

Einige Beispiele für Bibliotheken, die Ausdrucksbäume verwenden:

... Das sollte dir eine Vorstellung davon geben, welche Art von Projekten die Expressionsbäume ernsthaft nutzen. Wenn Sie also Ihre eigene Laufzeitumgebung oder MVC erstellen, möchten Sie auf jeden Fall alles lernen, was Sie können. ;)


Beliebte Antwort

  1. Was meinst du mit "Boost meinen Code"?
    Ausdrucksbäume erhöhen (normalerweise) nicht die Leistung; Sie werden verwendet, um zusätzliche Funktionalität zu ermöglichen.
  2. Expressionsbäume haben nichts mit LINQ zu tun. Zum Beispiel werden sie von Abhängigkeits-Injektionssystemen verwendet, um Typen zu spezifizieren und effizient zu funktionieren.
  3. LINQ to XML gibt IEnumerable<XElement> s zurück.


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum