Frage

Wie einfach wäre es, einen stummen LINQ-Anbieter zu schreiben, die nur meine Klassendefinitionen verwenden können (die keine Objektreferenzen als Eigenschaften haben) und geben Sie mir die übersetzte SQL. Es kann der Name der Eigenschaften annehmen und die Spalten sowie die Namen der Klassen und die zugrundeliegenden Tabellen gleich sein. Können Sie einige Hinweise bitte geben Sie mir.?

War es hilfreich?

Lösung

Es dauerte etwa 4 Monate Vollzeitarbeit (8 Stunden pro Tag) einen stabilen, Arbeitsanbieter zu bauen, die die gesamte Spezifikation von Linq implementiert. Ich würde sagen, ich habe ein sehr einfaches, Buggy und instabile Version nach etwa drei Wochen, also, wenn Sie gerade suchen grob etwas würde ich sagen, du ist wahrscheinlich auf allem von einer Woche suchst bis zu zwei Monaten, je nachdem wie gut Sie sind und welche Arten von requiements Sie haben.

ich Dich zum Wayward Blog für diesen Punkt muss, hat Matt einen wirklich guten Durchlauf geschrieben, wie ein Linq-Anbieter zu implementieren, und auch wenn Sie wahrscheinlich gehen zu können, kopieren und einfügen nicht, es wird Ihnen helfen In dem Griff zu bekommen, wie man denkt bei der Arbeit. Sie können Matt's Durchlauf finden Sie hier: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx . Ich empfehle Ihnen, darüber gehen die gleiche Art und Weise Matt tut, und erweitern die Ausdrucksbaum Besucher Matt im zweiten Teil seines Tutorial enthält.

Auch wenn ich mit diesem zu arbeiten begann, habe ich aus dem Ausdrucksbaum Visualizer so viel Hilfe hatte, machte es wirklich einfacher, eine ganze Menge Parsen, wenn Sie konnte sehen, wie Linq zu Abfragen analysiert.

einen Anbieter zu bauen ist wirklich sehr viel Spaß gemacht, auch wenn ein bisschen frustrierend. Ich wünsche Ihnen allen viel Glück!

Andere Tipps

Geben Sie einen Blick auf die LINQExtender Projekt ist ein Toolkit benutzerdefinierte LINQ-Anbieter zu schaffen.

Eine weitere Option, die Ihnen ein Bein zu geben scheint, re-Linq , die ein Framework ist benutzerdefinierte LINQ-Anbieter zu schaffen.

Hier ist der Quellcode und eine schöne Übersicht (pdf) von dem, was in schriftlicher Form eines beteiligt ist.

Ich habe ein Tutorial-Serie auf meinem Blog Basis geschrieben auf meiner Erfahrung eine LINQ to SQL-Anbieter von Grund auf neu zu entwickeln, mit dem Ausdruck Baum Zusammensetzung Stufe beginnen (die LINQ Methoden aufrufen), mit dem Ausdruck Besucher weiterhin, den Abbau der Abfrage in Komponenten, Parsen der Where-Klausel, die Erzeugung des Textes und Parameter und schließlich das ganze in IL Kompilieren des .NET Ausdruck Namespace.

Ich habe viele unvollständigen Beiträge gesehen, die versprach, zu erklären, wie man einen Anbieter zu schreiben, fällt der Marke sehr kurz, kaum an die Oberfläche kratzen und nicht wirklich etwas zu liefern remote ausführbare Datei.

Die Blog-Serie ich auf meiner Erfahrung basiert geschrieben habe hat ein Beispielprojekt zum Download zur Verfügung mit dem einfachen Anbieter, der nur die Funktionalität durch das Tutorial Beispiel erforderlich abdeckt. Allerdings enthält es auch die Serienversion eine Reihe von Operationen (wo, verbinden sie, zuerst, zählen, oben, etc.), Unterabfragen, verschachtelter Anweisungen und etc. Darüber hinaus erzeugt er einen sauberen SQL als eine Menge Unterstützung, was ich ve von Entitäten und LINQ-to-SQL gesehen. Es gibt keine unnötige / redundant Verschachtelung, Verpackung alles in Klammern etc.

Für jedermann mit einem guten Niveau des abstrakten Denkens, wie ein Anbieter die Entwicklung ist nicht so eine schwierige Aufgabe, viele Set es aus sein. Ich habe eine entwickelt, die in etwa 3 Monaten Teilzeitarbeit (was bedeutet, einige Abende und Wochenenden) in der Produktionsumgebung verwendet wird. Von dem es bekommen geht mit Leistung und ordentlich SQL im Auge gerichtet war - ein Ziel erreicht.

Es war ein wenig schwer, die Zeit zu finden, um dieses Material zu veröffentlichen, aber ich dachte - wenn es jemand da draußen helfen kann, gibt es keinen Grund für diese Erfahrung zu verschwenden zu gehen:

Ich habe ein Projekt angelegt ‚ LinqToAnything ‘, die es sehr einfach zu implementieren eine machen soll (einfach) Linq-Anbieter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top