2009-08-20 12 views
2

Wenn ich dringend genug wollte, konnte ich LINQ-to-SQL zusätzliche LINQ-Konstrukte hinzufügen (wie wäre es möglich, wenn ich meinen eigenen LINQ-Provider erstelle)? Zum Beispiel werden viele der eingebauten LINQ-Operatoren (XYZ.Any()) direkt in SQL übersetzt (z.B. IF EXISTS(XYZ)).Kann ich die von LINQ-to-SQL unterstützten Operatoren erweitern?

Wenn ich ein spezielles Konstrukt benötigt, würde ich sogar in der Lage sein, den Satz zu ergänzen, oder diese in den eigentlichen LINQ-to-SQL-Provider gebacken werden muss?

Wie würde ich eine neue Operatorimplementierung hinzufügen? Sind C# -Erweiterungsmethoden genug, um den Job zu erledigen?

Wenn die Antwort ja ist, würde jemand so geneigt Lage sein, viel zu ersetzen (alle?) Von sproc Fähigkeit über die dynamische SQL erzeugt von LINQ to SQL?

Antwort

1

Theoretisch könnten Sie die Unterstützung für beliebige Ausdrücke zu einem LINQ-Anbieter hinzufügen, aber Pavel ist richtig, dass LINQ to SQL nicht als Ausgangspunkt arbeiten. Ich würde in SubSonic oder NHibernate schauen, die auch LINQ-Anbieter in der Entwicklung haben. Sobald der Provider einen Ausdruck unterstützt, müssen Sie nur eine entsprechende Erweiterungsmethode unter IQueryable<T> - reflect System.Linq.Queryable für Details erstellen.

Das heißt, Ausdruck Bäume Parsen definitiv nichts für schwache Nerven. Sofern Sie nicht wirklich an der AST-Theorie interessiert sind, wäre es wahrscheinlich einfacher, ein OSS-ORM auf eine "normale" Weise zu erweitern.

+0

Ich bin ziemlich vertraut mit dem, was es aus dem AST-Parsing/Expression-Tree-Ende der Dinge nehmen würde. Ich habe eigentlich noch keinen genauen Bedarf, habe mich aber meistens nur für den zukünftigen Gebrauch gewundert. Es ist schade, denn es wäre ein wirklich cooles Modell, wenn * alles * in LINQ ausgedrückt werden könnte. Nun, wenn Sie SubSonic & NHibernate erwähnen, ist das, weil sie * Erweiterung * erlauben oder nur als ein anderer Anbieter, der haben könnte, was ich brauche? – mckamey

+0

Ich bin mir nicht bewusst, dass es für ExSonic oder NHibernate eine eingebaute Ausdruckserweiterung gibt, aber Sie haben zumindest die Möglichkeit, die Quelle herunterzuladen und Ihre eigenen hinzuzufügen. So cool es wäre, in LINQ _everything_ auszudrücken, gibt es einige SQL-Konstrukte, die einfach nicht gut abbilden. Das kann sich mit der erweiterten Expression-Unterstützung in .NET 4 ändern. – dahlbyk

1

Nein, LINQ to SQL ist nicht erweiterbar. Das Beste, was Sie tun können, ist gespeicherte Prozeduren zu verwenden.

Verwandte Themen