Les dossiers MSDN

Le développement d'applications

Article par Pascal Belaud, Microsoft France

Pascal est en charge, depuis plus de 10 années, de la relation technique avec les développeurs chez Microsoft France. Vous pouvez le retrouver sur son blog à l’adresse : https://blogs.msdn.com/Pascal

Cet article a été originellement publié dans le magazine Programmez ! du mois d’octobre et novembre 2008 : www.programmez.com

 

Linq To SQL

Avec le Microsoft .NET Framework 3.5 (et Microsoft Visual Studio 2008) est apparue une nouvelle technologie qui permet aux développeurs, dans leur langage de développement préféré (C# ou Visual Basic par exemple) de requêter des données pouvant être sous la forme de tableaux en mémoire, de documents XML, de DataSet ou encore de base de données de type SQL Server.

Cette fonctionnalité, baptisée « LINQ » pour « Language INtegrated Query », permet aux développeurs d’exprimer ce qu’ils souhaitent faire plutôt que d’expliquer comment le faire. On se rapproche clairement des langages dits fonctionnels (tel que « F# » par exemple). L’expression de ce besoin se fait en utilisant une syntaxe proche de la syntaxe SQL (« Query Expression »). Et pour cause, le langage SQL a clairement été conçu pour aider au requêtage des données. Voici un exemple en VB du requêtage d’un tableau d’objet en mémoire. Nous souhaitons récupérer l’ensemble des processus actuellement chargés en mémoire, dont l’empreinte mémoire est supérieure à 10Mo, le tout classé par ordre croissant de nom de processus :

Imports System.Diagnostics

Dim mesProcess = From monProcess In Process.GetProcesses() _

                 Where monProcess.WorkingSet64 > 10 * 1024 * 1024 _

                 Order By monProcess.ProcessName Ascending _

                 Select New With _

                 { _

                     .Nom = monProcess.ProcessName, _

                     .Mémoire = monProcess.WorkingSet64 _

                 }

Une des « versions » de « LINQ » s’appelle « Linq To SQL » et permet de faire la même chose mais en attaquant une base de données SQL Server.

Une fois qu’on a déclaré les tables auxquelles on voulait avoir accès (en ne retenant que les colonnes qui nous intéressent et en renommant celles choisies si on le souhaite), on peut requêter ces tables de la même manière que l’exemple précédent :

Dim monDataContext = New MSPressDataContext()

 Dim mesLivres = From monLivre In monDataContext.Ouvrages _

                Where monLivre.Ouv_CurPrix > 5 AndAlso _

                      monLivre.Ouv_CurPrix < 90 _

               Order By monLivre.Titre Ascending _

                Select monLivre

La question désormais est : pourquoi avoir prévu une telle technologie alors qu’elle existe déjà dans SQL Server et se nomme le langage SQL lui-même ? Et bien, il y’a plusieurs arguments en faveur de LINQ et l’un d’entre eux est le fait qu’on puisse effectuer des requêtes qui impliquent des données aussi différentes que des tableaux en mémoire, des documents XML, des DataSets ou encore des bases de données SQL Server, le tout en même temps ! Par exemple, on aurait pu mélanger la requête précédente sur les processus chargés en mémoire avec des descriptions des processus qui se trouveraient dans des documents XML et des statistiques d’utilisation de ces processus qui se trouveraient quant à elle dans une base de données SQL Server.