Qu'est-ce que LINQ et pour quoi faire?
Qu'est-ce que LINQ? Je sais que c'est pour les bases de données, mais que fait-il?
- Je crois que j'ai vaincu le "ne peut pas être raisonnablement répondu" des critères. Il n'y a pas de raison que cette question devrait être fermé.
- Écouter le créateur de LINQ, Erik Meijer, dire ce qu'il en est. BTW, c'est pas pour seule base de données.
Vous devez vous connecter pour publier un commentaire.
LINQ signifie Language Integrated Query.
Au lieu d'écrire YAQL (Encore un Query Language), langage de Microsoft développeurs ont fourni un moyen d'exprimer des requêtes directement dans leur langue (comme C# et Visual Basic). Les techniques de formation de ces requêtes ne comptez pas sur les détails de mise en œuvre de l'objet de la requête, de sorte que vous pouvez écrire des requêtes valides par rapport à un grand nombre de cibles (bases de données, des objets en mémoire, XML) avec pratiquement aucune considération de la sous-jacentes manière dont la requête sera exécutée.
Nous allons commencer cette exploration avec les pièces appartenant à l' .NET Framework (3.5).
LINQ to Objects - examiner Système.Linq.Énumérable pour les méthodes de requête. Ces cibles
IEnumerable<T>
, permettant à tout tapé loopable collection pour être interrogé dans un type de la sécurité. Ces requêtes s'appuyer sur compilé .NET de méthodes, dans ses Expressions.LINQ to Tout - à examiner Système.Linq.Queryable pour certaines méthodes de requête. Ces cibles
IQueryable<T>
, permettant la construction des Arbres d'Expression qui peut être traduit par l'implémentation sous-jacente.Des Arbres d'Expression - examiner Système.Linq.Les Expressions espace de noms. C'est le code en tant que données. Dans la pratique, vous devriez être au courant de ce genre de choses, mais n'ont pas vraiment besoin d'écrire du code à l'égard de ces types. Fonctionnalités de la langue (comme les expressions lambda) peut vous permettre d'utiliser divers court-mains pour éviter de faire face à ces types directement.
LINQ to SQL examiner les Système.Les données.Linq espace de noms. Remarque surtout la
DataContext
. C'est un DataAccess technologie intégrée par l'équipe C#. Il fonctionne, tout simplement.LINQ to entities - examiner les Système.Les données.Les objets espace de noms. Remarque surtout la
ObjectContext
. C'est un DataAccess technologie construit par l'ADO.NET de l'équipe. Il est complexe, puissant, et plus difficile à utiliser que LINQ to SQL.LINQ to XML - examiner les Système.Xml.Linq espace de noms. Essentiellement, les gens n'étaient pas satisfaits avec les trucs dans
System.Xml
. Si Microsoft ré-écrit et a pris avantage de la ré-écriture de présenter quelques méthodes qui facilitent l'utilisation de LINQ to Objects sur XML.Quelques belles helper types, tels que Func et Action. Ces types sont des délégués avec Support Générique. Allés sont les jours de déclarer votre propre personnalisé (et non interchangeable) délégué types.
Tous les ci-dessus est de la partie .NET Framework, et disponible à partir de tout .NET de la langue (VB.NET, C#, IronPython, COBOL .NET, etc).
Ok, sur les fonctions du langage. Je vais m'en tenir à C#, puisque c'est ce que je connais le mieux. VB.NET avait également plusieurs améliorations similaires (et un couple que le C# n'a pas l'obtenir - les littéraux XML). C'est une courte liste incomplète.
Les Méthodes d'Extension qui vous permet de vous "ajouter", une méthode de type. La méthode est vraiment une méthode statique qui est transmis à une instance du type, et il est limité au marché public de la type, mais il est très utile pour ajouter des méthodes de types vous n'avez pas le contrôle (de la chaîne), ou l'ajout d' (entièrement mis en œuvre) les méthodes d'aide aux interfaces.
Requête de Compréhension de la Syntaxe - ce qui vous permet d'écrire en SQL, la forme de la structure. Tout ça se traduit pour les méthodes du Système.Linq.Queryable ou d'un Système.Linq.Énumérable (selon le Type de myCustomers). Il est totalement facultatif et vous pouvez utiliser LINQ bien sans elle. L'un des avantages de ce style de requête de déclaration, c'est que la gamme de variables sont limités: ils n'ont pas besoin d'être déclarée pour chaque clause.
Les Expressions Lambda - C'est un raccourci pour la spécification d'une méthode. Le compilateur C# va traduire chaque en une méthode anonyme ou un vrai
System.Linq.Expressions.Expression
. Vous avez vraiment besoin de comprendre ces utiliser Linq bien. Il y a trois parties: une liste de paramètres, d'une flèche et d'un corps de méthode.Les Types anonymes - Parfois, le compilateur dispose de suffisamment d'informations pour créer un type pour vous. Ces types ne sont pas vraiment anonyme: le nom du compilateur lorsqu'il les fait. Mais ces noms sont faites au moment de la compilation, ce qui est trop tard pour un développeur d'utiliser ce nom au moment de la conception.
Implicite Types - Parfois, le compilateur a suffisamment d'informations à partir d'une initialisation qu'il peut comprendre le type pour vous. Vous pouvez demander au compilateur de le faire en utilisant le mot-clé var. Typage implicite est nécessaire de déclarer les variables de Types Anonymes, depuis les programmeurs ne peuvent pas utiliser le nom d'une anonyme type.
LINQ (Language INtegrated Query) peut se référer à:
une bibliothèque pour la collecte et l'itérateur manipulation qui fait un large usage des fonctions d'ordre supérieur comme arguments (le Système.Linq)
une bibliothèque pour la transmission et la manipulation de fonctions simples comme l'arbre de syntaxe abstraite (le Système.Linq.Expressions)
une syntaxe extension aux différentes langues, pour donner plus de syntaxe de type SQL pour le traitement des collections, une notation plus compacte pour les fonctions anonymes, et un mécanisme permettant d'introduire des fonctions d'assistance statique du point de vue syntaxique indiscernables de finale fonctions de membre
une définition d'interface à laquelle les fournisseurs de données peuvent être conforme pour recevoir la structure de la requête et éventuellement effectuer l'optimisation de ce sujet, ou, parfois, compatible fournisseurs de données eux-mêmes
Les composants peuvent être utilisés isolément ou combiné.
En un mot, LINQ (Language-Integrated Query) vous permet d'écrire des requêtes directement dans votre code. Ces requêtes peuvent être sur les bases de données relationnelles, mais aussi sur XML ou en mémoire contenant des objets, tels que des tableaux et des listes. Plus d'informations sont disponibles dans la bibliothèque MSDN: http://msdn.microsoft.com/en-us/library/bb308959.aspx
Je vais essayer pour une réponse simple: LINQ est une façon pour vous de vous interroger votre base de données (ou autre magasin de données, XML, etc) à l'aide d'un langage de requête qui est similaire à SQL mais peut être compilé à l'intérieur d'un .NET application.
From Where Select, etc.
- c'est à dire qu'il devrait être écrit de la manière que le Jeu de résultats est réellement forméLINQ est synonyme de Language Integrated Query, et est une manière de donner un objectif général de "l'interrogation" mécanisme dans le CLR.
À son niveau le plus basique, il se compose d'un ensemble de méthodes sur IEnumerable<T> - eg., Sélectionnez, Somme, Où - qui peut être utilisé pour les restrictions, les projections, etc.[1]
De prendre un peu plus loin, LINQ définit également une nouvelle LINQ modèle de fournisseur qui peut prendre une expression de l'arbre et de l'utiliser pour exécuter des "indigènes" des requêtes sur une source de données à l'extérieur de la CLR - eg., LINQ to SQL, LINQ to XML, LINQ to NHibernate, etc.
C# et VB.NET ont également défini une syntaxe de requête qui permet d'écrire des requêtes fortement typées en ligne (qui est très similaire à SQL), le compilateur traduit par l'équivalent IEnumerable<T> appels.
Pour moi, la chose la plus intéressante à propos de LINQ est tous des C# et VB.NET des fonctionnalités qui ont été nécessaire pour la soutenir sont utiles dans leur propre droit. Les méthodes d'Extension, les types anonymes, des expressions lambda, et de typage implicite a été nécessaire à l'appui de LINQ - mais nous avons tendance à utiliser ces fonctions à l'extérieur de un pur LINQ contexte.
[1] ce sont des termes relationnels, fonctionnelle programmeurs préféreraient probablement de la Carte, de Réduire, de les Plier, etc.
LINQ est une technologie d'extraction de données à l'aide d'un idiome dérivé du langage de programmation C#. Alors qu'il doit beaucoup à la conception fonctionnelle de SQL, il est fondamentalement son propre langage d'interrogation de données. Il opère à travers un large éventail de sources de données (bases de données SQL, les représentations de la mémoire, XML, etc.). LINQ-to-SQL, en particulier, devrait être considérée comme une revanche pour l'utilisation traditionnelle de l'embedded SQL qui souffre de ce qui est souvent désigné comme une "impédance" incompatibilité entre la programmation SQL et C#/VB.
Pour une discussion de LINQ et de ses limites, vous pouvez prendre un coup d'oeil à cette question: Ne pas LINQ to SQL manquer le point?
http://msdn.microsoft.com/en-us/netframework/aa904594.aspx
"Le Projet LINQ est un nom de code pour un ensemble d'extensions à la .NET Framework qui englobent language-integrated query, ensemble, et les opérations de transformation. Elle s'étend de C# et Visual Basic avec les autochtones de la syntaxe du langage de requêtes et fournit des bibliothèques de classe pour tirer parti de ces capacités."