Microsoft veut faire de 2008, l’année du renouveau de sa plateforme applicative. Parmi les nouveautés, ADO.NET Entity Framework, ADO.NET Data Services, les extensions d’ASP.NET, Silverlight, et bien évidemment LINQ.

Pourquoi LINQ ?

Tout développeur a déjà été confronté aux problèmes posés par le traitement de collections, notamment lorsqu’il s’agit de sélectionner, de filtrer, de trier … Les modèles de programmation à base de requête, comme SQL, permettent très simplement de manipuler des jeux de données. Dans des langages objets classiques, il est souvent nécessaire d’itérer sur les éléments d’une collection, pour réaliser ces mêmes opérations.

Plus globalement, la programmation d’applications nécessite l’interaction entre 3 modèles de programmation, désespérément murés dans leur sollitude :

  • l’Objet,
  • XML,
  • le Relationnel.

Les développeurs passent souvent un temps considérable dans l’écriture du code nécessaire à l’interaction entre ces 3 mondes. Les frameworks comme les ORM apportent une solution efficace à la problématique posée par le mapping entre le modèle objet et le modèle relationnel.

Qu’est-ce que LINQ ?

LINQ (ou language integrated query) est un langage de requête permettant d’interroger des sources de données, indépendamment de leur nature. LINQ est directement intégré aux langages de la plateforme .NET, dont il étend la syntaxe. Ainsi, tout en restant dans le langage C# ou Visual Basic .NET, il est possible de coder des requêtes LINQ, dont la syntaxe est vérifiée par le compilateur. LINQ n’est pas sans rappeler SQL, même si certains aspects sont notablement différents. Son usage est donc très simple et intuitif. De manière générale, LINQ incarne le passage du paradigme impératif (enchainement d’instructions) au paradigme déclaratif (définition du besoin).

LINQ permet d’interroger, avec différents adaptateurs, des sources de données de différentes natures :

  • LINQ to Objects permet d’exécuter des requêtes LINQ sur des collections d’objets.
  • LINQ to SQL permet d’interroger une base de données avec de requêtes LINQ. Les requêtes LINQ sont traduites en SQL à l’exécution.
  • LINQ to XML permet de requêter les données d’un document XML.

ADO.Net Entity Framework, le futur ORM de Microsoft, contiendra également LINQ to Entities, qui permettra de formuler des requêtes LINQ sur les entités.

Il existe bien d’autres adaptateurs LINQ. Le langage a en effet été pensé de telle manière, qu’il est possible d’utiliser ses capacités pour d’autres problèmes, comme par exemple, la recherche de données dans un fichier texte, en passant par les expressions régulières.

Comment ça marche ?

L’extensibilité de LINQ est rendue possible grâce aux fonctionnalités offertes par le framework .NET 3.5. En coulisse, LINQ s’appuie en effet sur :

  • les lambda expressions,
  • les retours partiels (mot clé yield),
  • les méthodes d’extension,
  • l’inférence de type (mot clé var),
  • les initialiseurs d’objets,
  • et enfin, les types anonymes.

LINQ s’appuie également sur des librairies, qui proposent des méthodes d’extension comme Select, From, Where … . À ces méthodes d’extension, sont associés des mots-clés, rendant ainsi LINQ plus lisible. Les lambda expressions permettent de formuler la condition d’une clause where.

En guise de conclusion

LINQ est une réelle nouveauté dans le monde .NET, mais aussi, dans le monde objet en général. À n’en point douter, il va simplifier les développements et permettre de gagner en efficacité. Toutefois, il sera nécessaire de l’employer avec discernement, à la fois pour bien comprendre les impacts de l’utilisation de telle ou telle variante, mais également pour éviter des abus qui pourraient nuire à la pérennité d’une application. Par exemple, il conviendra sans doute d’éviter un écueil possible, qui mènerait à interroger la base de données directement depuis la couche présentation.

Billets sur le même thème