Question

Comment serait-il facile d'écrire un fournisseur de LINQ stupide qui peut simplement utiliser mes définitions de classe (qui n'ont pas de références d'objet en tant que propriétés) et me donnent la traduction SQL. Il peut prendre le nom des propriétés et les colonnes à même, ainsi que les noms des classes et les tables sous-jacentes. Pouvez-vous me donner quelques s'il vous plaît pointeurs.

Était-ce utile?

La solution

Il m'a fallu construire une écurie, un fournisseur de travail qui implémente la spécification complète de LINQ environ 4 mois de travail à temps plein (8 heures par jour). Je dirais que j'avais un très simple, buggy et la version instable après environ trois semaines, donc si vous êtes à la recherche de quelque chose de difficile, je dirais que vous êtes probablement à quoi que ce soit d'une semaine à deux mois selon la façon dont bon vous sont et quels types de requiements que vous avez.

Je dois vous indiquer au blog Wayward pour cela, Matt a écrit une soluce vraiment bien sur la façon de mettre en œuvre un fournisseur de LINQ, et même si vous allez probablement pas être en mesure de copier et coller, il vous aidera à de se familiariser avec la façon de penser lors du travail. Vous pouvez trouver ici Matt's visite virtuelle: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx . Je vous recommande d'aller à ce sujet de la même manière Matt fait, et prolongez l'arbre d'expression visiteur Matt inclut dans la deuxième partie de son tutoriel.

En outre, quand je commencé à travailler avec cela, j'avais tant l'aide de l'outil de visualisation de l'arbre d'expression, il a vraiment fait l'analyse beaucoup plus facile une fois que vous pouvez voir comment LINQ parsés aux requêtes.

Construire un fournisseur est vraiment beaucoup de plaisir, même si un peu frustrant parfois. Je vous souhaite bonne chance!

Autres conseils

Donner un coup d'oeil au projet LINQExtender , est une boîte à outils pour la création de fournisseurs de LINQ personnalisé.

Une autre option pour vous donner un coup de pouce semble être re-LINQ qui est un cadre pour la création de fournisseurs LINQ personnalisé.

Voici le code source et une belle (pdf) de ce qui est impliqué par écrit un.

J'ai écrit une série de tutoriel sur ma base de blog sur mon expérience dans le développement d'un LINQ to SQL fournisseur à partir de zéro, en commençant par l'étape de la composition de l'arbre d'expression (appeler les méthodes LINQ), en continuant avec le visiteur d'expression, décomposant de la requête en composants, l'analyse de la clause where, générant le texte et le paramètre et, éventuellement, la compilation de la chose entière dans IL en utilisant l'espace de noms d'expression .NET.

Je l'ai vu de nombreux postes incomplets qui promettaient d'expliquer comment écrire un fournisseur, tombant très court de la marque, se grattant à peine la surface et ne pas livrer quoi que ce soit exécutable à distance.

La série de blog, je l'ai écrit d'après mon expérience a un exemple de projet disponible en téléchargement avec le fournisseur simple qui ne couvre que la fonctionnalité requise par l'exemple tutoriel. Cependant, il comprend également la version de production supportant un certain nombre d'opérations (où, joignez-vous, d'abord, compter, haut, etc.), les sous-requêtes, états imbriqués, et etc. De plus, il produit un nettoyant SQL que beaucoup de ce que je ve vu des entités et LINQ to SQL. Il n'y a pas d'imbrication inutile / redondante, tout emballage entre parenthèses et etc.

Pour toute personne ayant un bon niveau de la pensée abstraite, le développement d'un tel fournisseur n'est pas une tâche difficile beaucoup reproduis être. J'ai développé un qui est utilisé dans un environnement de production dans environ 3 mois de travail à temps partiel (ce qui signifie certains soirs et week-ends). Dès le départ, il avait pour objectif la performance et SQL bien rangé à l'esprit - un objectif qu'il atteint.

Il était un peu difficile de trouver le temps de publier ce document, mais je pensais que - si elle peut aider quelqu'un là-bas, il n'y a aucune raison pour que cette expérience pour aller à déchets:

J'ai créé un projet « LinqToAnything » qui est conçu pour le rendre très facile à mettre en œuvre une (simple) fournisseur Linq.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top