2 Stimmen

Kann ich die von LINQ-to-SQL unterstützten Operatoren erweitern?

Könnte ich, wenn ich es unbedingt wollte, zusätzliche LINQ-Konstrukte zu LINQ-to-SQL hinzufügen (so wie ich es könnte, wenn ich meinen eigenen LINQ-Provider erstellen würde)? Zum Beispiel sind viele der eingebauten LINQ-Operatoren ( XYZ.Any() ) werden direkt in SQL übersetzt (z. B. IF EXISTS(XYZ) ).

Wenn ich ein spezielles Konstrukt bräuchte, könnte ich die Menge dann überhaupt erweitern, oder muss dies in den eigentlichen LINQ-to-SQL-Anbieter integriert werden?

Wie kann ich eine neue Operator-Implementierung hinzufügen? Sind C#-Erweiterungsmethoden genug von einem Haken, um die Arbeit zu tun?

Wenn die Antwort ja lautet, könnte dann jemand, der dazu geneigt ist, einen Großteil (alles?) der Sproc-Fähigkeiten durch das dynamische SQL ersetzen, das von LINQ-to-SQL generiert wird?

1voto

Pavel Minaev Punkte 97251

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

1voto

dahlbyk Punkte 71222

Theoretisch könnte man einem LINQ-Anbieter Unterstützung für beliebige Ausdrücke hinzufügen, aber Pavel hat Recht, dass LINQ to SQL als Ausgangspunkt nicht funktionieren würde. Ich würde mir SubSonic oder NHibernate ansehen, die ebenfalls LINQ-Provider in der Entwicklung haben. Sobald der Provider einen Ausdruck unterstützt, müssen Sie lediglich eine entsprechende Erweiterungsmethode für IQueryable<T> - reflektieren System.Linq.Queryable für Einzelheiten.

Allerdings ist das Parsen von Ausdrucksbäumen definitiv nichts für schwache Nerven. Wenn Sie nicht wirklich an der AST-Theorie interessiert sind, wäre es wahrscheinlich einfacher, ein OSS ORM auf "normale" Weise zu erweitern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X