Kader Yildirim
LINQ à 360 degré, Partie 1
Cet article présente les principales fonctionnalités apportées par LINQ
Par Kader Yildirim publié le 01/06/2007 à 00:22, lu 4793 fois, 7 pages
 5 | Utilisation des lambda expressions
La plupart des opérateurs LINQ, dont la liste est fournie ci-dessous, prennent en paramètre un délégué. Ainsi il est possible de leur passer en argument des lambda expressions.

Si on prend l'exemple de la jointure :
 
/content/2f886443-7134-4eaa-9672-e7d6501cdbe9/Join.PNG
 
Ce type de méthode est ce que l'on appelle une méthode d'extension et est facilement repérable par le mot clé this qui apparaît dans la liste de ses paramètres.

Ainsi il est possible de rajouter des méthodes à une classe déjà existante afin de l'enrichir. La classe étendue est celle qui se trouve derrière le mot clé this qui apparaît dans la déclaration de la méthode (IQueryable<T> dans notre cas).

En utilisant cette possibilité le code deviendrait alors :

static void DoJobNewWay3()

        {

            var QuelquesPays = new[] {

                            new { Nom="France", Population=60000000, Superficie=550000},

                            new { Nom="Turquie", Population=70000000, Superficie=750000},

                            new { Nom="Chine", Population=1300000000, Superficie=9600000},

                            new { Nom="USA", Population=300000000, Superficie=9000000},

                            new { Nom="Maroc", Population=31000000, Superficie=450000},

                            new { Nom="Suisse", Population=7500000, Superficie=40000} };

 

            var GrosPays = QuelquesPays.Where(p => p.Superficie > 1000000);

 

            // Operations...

 

            foreach (var p in GrosPays)

            {

                Console.WriteLine(p);

            }

        }

Dans ce cas de figure le code généré par le compilateur est le même que celui du cas précédent :

.method private hidebysig static bool 

            '<DoJobNewWay3>b__10'(

                class '<>f__AnonymousType0`3'<string,int32,int32> p)

                cil managed

        {

          .custom instance void [mscorlib]System.Runtime.CompilerServices.

                    CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )

          // Code size       18 (0x12)

          .maxstack  2

          .locals init ([0] bool CS$1$0000)

          IL_0000:  ldarg.0

          IL_0001:  callvirt   instance !2

                    class '<>f__AnonymousType0`3'<string,int32,int32>::get_Superficie()

          IL_0006:  ldc.i4    0xf4240

          IL_000b:  cgt

          IL_000d:  stloc.0

          IL_000e:  br.s       IL_0010

          IL_0010:  ldloc.0

          IL_0011:  ret

        } // end of method Program::'<DoJobNewWay3>b__10'

 
» Démarrer une discussion
 
Discussion démarée par houcine_kadiri le 05/06/2007 à 11:50, 2 commentaire(s).
Discussion démarée par Laurent Kempé le 01/06/2007 à 14:13, 1 commentaire(s).