LINQ zur benutzerdefinierten Abfragesprache?

c# expression-trees linq

Frage

Ich schreibe ein Tool, das Daten von einer Quelle benötigt. Diese Quelle wird vom Benutzer angegeben und kann Dinge wie ein SQL-Backend, eine proprietäre Datenbank, ein flaches Dateisystem, wer weiß.

Ich möchte, dass meine Schnittstelle diese Art von Abfrage abruft, um Linq zu verwenden, da es am besten C # -freundlich erscheint und viel .NET-Code nutzen kann.

Ich habe einige der Forschung getan, und durch den Aufbau eines IQueryProvider durch die große Tutorial begann hier . Es hat mir einen großen Teil des Weges gebracht, aber jetzt bin ich verwirrt darüber, wie die Benutzer den Ausdrucksbaum am besten in ihren benutzerdefinierten Code konvertieren können.

Ich versuche herauszufinden, wie man eine einfache Schnittstelle für Benutzer bereitstellen kann, um anzugeben, wie man einen Ausdrucksbaum in einen benutzerdefinierten "Code" (dh "SQL") umwandelt, und er erscheint ziemlich umständlich und komplex - ich stelle mir das vor es ist genau das.

Meine Frage ist: Was ist der beste Weg, um einen Ausdrucksbaum in eine benutzerdefinierte Sprache zu konvertieren?

Am nächsten kann ich sagen, dass ich die 'Context' Klasse benutzen soll, um meine eigene Parsing-Logik zu machen, aber die API, die ich benutze, scheint ziemlich niedrig zu sein - gibt es Operationen auf höherer Ebene, die ich einfach Operationen zu Strings zuordnen kann?

Akzeptierte Antwort

Es gibt keine einfache oder direkte Möglichkeit, den Ausdrucksbaum in Ihre benutzerdefinierte Abfragesprache umzuwandeln. Vielleicht möchten Sie LinqExtender ausprobieren

http://mehfuzh.github.com/LinqExtender/

Welche implementiert ein Besuchermuster für die Konvertierung zwischen linq und Ihre DSL.

LinqExtender ist ein Toolkit zum Erstellen von benutzerdefinierten LINQ-Anbietern. Es stellt eine abstrahierte Ebene über der ursprünglichen IQyeryable- und IQueryProvider-Implementierung bereit und bietet eine vereinfachte Syntaxstruktur. Darüber hinaus umfasst es intern Dinge wie Projektion, Methodenaufrufe, Ordery by, Member Parsing usw. Daher kann sich der Entwickler mehr auf seine Hauptaufgabe konzentrieren, abzüglich der Komplexität

.


Beliebte Antwort

Im Allgemeinen ist der beste Weg, um eine Baumstruktur in eine andere Form zu konvertieren, das Besuchermuster zu verwenden .

Überprüfen Sie speziell die ExpressionVisitor- Klasse in msdn.



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