SQL-Anweisung in Ausdrucksbaumstruktur

c# expression-trees

Frage

Ich frage mich, wie man eine SQL-Zeichenfolge in einen Ausdrucksbaum übersetzen würde. Derzeit wird in Linq to SQL der Ausdrucksbaum in eine SQL-Anweisung übersetzt. Wie geht es in die andere Richtung? Wie würdest du übersetzen?

select * from books where bookname like '%The%' and year > 2008 

in einen Ausdrucksbaum in c #?

Beliebte Antwort

Ich weiß nicht, ob es einen einfacheren Weg gibt, aber ich schrieb einen Lexer und Parser für SQL-Ausdrücke in einen benutzerdefinierten Abstract Syntax Tree (wie ich zu diesem Zeitpunkt noch nichts von .nets Expression Trees wusste) und es hat mir nicht wirklich gefallen Parsen von SQL.

Die Syntax ist einfach nicht sehr parsenfreundlich, da die Reihenfolge je nach Kontext unterschiedlich ist (zB nicht in NOT IN vs. IS NOT ), Token sind überladen (die Klammer zum Überschreiben der Standardoperatorpräzedenz vs. Klammern zum Erstellen einer Liste wie in) WHERE x IN (1, 2) ) und so weiter.

Offensichtlich würde die Verwendung eines Parser-Generators, anstatt selbst zu lexen und zu parsen, die Dinge einfacher machen, aber ich weiß nicht, ob es etwas Spezifischeres für SQL gibt.

Also, das Schreiben Ihrer eigenen ist definitiv möglich, wenn auch mühsam.




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