Patrice Lamarche
Les fonctionnalités du langage C# 3 compatibles avec .net 2.0
Comment utiliser les fonctionnalités du langage C# 3 pour vos applications .net 2.0
Par Patrice Lamarche publié le 23/02/2010 à 21:08, lu 2403 fois, 6 pages
 4 | Linq To Objects
Utiliser Linq To Objects depuis une application .net 2.0 est possible. Je vous propose de voir deux implémentations différentes qui vous permettront d’arriver à vos fins.
LinqBridge est un projet présenté dans l’ouvrage C# 3 in a Nutshell. Il permet de créer des requêtes Linq To Object directement depuis le code d’une application .net 2.0. Afin d’implémenter Linq To Objects, le développeur du projet a implémenter tous les opérateurs de requêtage que vous pouvez trouver dans la classe Enumerable présente dans le framework 3.5. Cette classe est un simple conteneur qui fournit toutes les méthodes d’extensions qui sont appelées lors de l’écriture d’une requête Linq. LinqBridge contient donc tout simplement un ensemble de classe qui définissent une implémentation de ces méthodes d’extensions qui vont permettent d’étendre IEnumerable<T>.
Pour utiliser LinqBridge, c’est très simple : il suffit de créer un projet .net 2.0 comme vous le faites habituellement en spécifiant bien la version du framework à utiliser :
 
/content/3211fede-6c8d-41e4-a8b0-512548016f5c/image1.png
 
Une fois votre projet .net 2.0 créé, il faut rajouter une référence vers l’assembly de LinqBridge (LinqBridge.dll). Vous n’avez plus qu’à rajouter un using System.Linq (les classes de LinqBridge sont inclues dans ce namespace) afin de pouvoir écrire vos requêtes Linq To Object :

static void Main(string[] args)

    {

        var lastnames = new List<string>() { "Dupond", "Durand", "Martin" };

 

        var names = from n in lastnames

                    where n.StartsWith("D")

                    select n;

 

        foreach (var name in names)

            Console.WriteLine(name);

    }

LinqBridge est disponible sur Google Code à cette adresse : http://code.google.com/p/linqbridge/downloads/list
Je vous invite à regarder le code du projet puisque celui-ci est court, et permet de voir rapidement comment les différents opérateurs sont implémentés.
NLinq est une implémentation totalement différente de LinqBridge. Le projet offre la possibilité de créer des requêtes très proches de Linq To Objects mais à une différence de taille : celles-ci doivent être définies dans des chaines de caractères ! L’écriture d’un code équivalent à celui utilisé ci-dessus se fait de cette manière :

static void Main(string[] args)

    {

        var lastnames = new List<string>() { "Dupond", "Durand", "Martin" };

 

        var query = new NLinqQuery(@"from n in lastnames

                    where n.StartsWith('D')

                    select n");

 

        var linq = new LinqToMemory(query);

        linq.SetParameter("lastnames", lastnames);

 

        foreach (var name in linq.Enumerate())

        {

            Console.WriteLine(name);

        }

    }

L’utilisation de chaines de caractères pour définir des requêtes peut sembler être un obstacle majeur à son utilisation mais NLinq peut tirer son épingle du jeu dans certains cas. Premier avantage de cette technique, vous pouvez utiliser NLinq depuis vos applications .net 2.0 mais également depuis une application .net 1.x en utilisant les précédentes versions de Visual Studio. NLinq ne repose en effet sur aucune fonctionnalité particulière du compilateur et par conséquent est plus portable que LinqBridge.
Autre avantage, la possibilité de composer ses requêtes de manière dynamique. Il s’agit du genre de technique que l’on utilise parfois en SQL via sp_execute_sql ou l’instruction Exec(), avec NLinq vous allez être capable de faire la même chose avec vos requêtes LINQ. Vos requêtes étant stockées sous forme de chaine, il est très simple de les composer comme vous le souhaitez, voire de déléguer cette création aux utilisateurs de votre application.
NLinq est disponible sur CodePlex à cette adresse : http://nlinq.codeplex.com/
 
» Démarrer une discussion
 
Discussion démarée par Sébastien Lebreton le 24/02/2010 à 12:00, 1 commentaire(s).