Le langage Linq

Le langage LINQ TO Objects

1) Découverte de LINQ (Language INtegrated Query)

Nous avons vu que le framework permettait d'interroger des structures linéaires (tableau, ArrayList...) en utilisant des expressions Lambda (cf la méthode filtrer).

Ainsi, ce que nous avons construit "à la main" est proposé par défaut pour les types tableau et List ; par contre pas pour les ArrayList. Ceci s'utilise avec la méthode d'extension Where.

- Where est une méthode d'extension pour les tableaux
- Where prend comme seul argument une expression lambda (ou un délégué)
- Le type de retour est une interface générique IEnumerable<T> ; l'utilisation d'un type anonyme (var) allège ici l'écriture !.

Ensuite il faudra parcourir la liste IEnumerable obtenu :

On peut remarquer que le type générique a été transformé en <int> ; le compilateur a inféré le type réel.

Mais parallèlement aux expressions lambda, le Framework propose un langage de requétage spécifique. Ecrivons la même "requête" en Linq :

Nous sommes dans un monde plus connu !! Notons néanmoins l'ordre inattendu des instructions.

Si nous regardons le code généré par le compilateur dans les deux versions :

nous constatons que c'est strictement le même code :

Ainsi, linq propose une surcouche de requêtage plus naturelle et présentant le double avantage :

- Simplicité (relative :-)) du requêtage et vérification syntaxique à la compilation et non à l'exécution.

- Bénéfice de l'intellisence du code à l'intérieur du requêtage.

2) Des éléments de syntaxe

Utilisons pour cela une liste plus fournie :

Reprenons notre classe Personne :

Construisons une liste de Personne :

Menons des requêtes linq :

Ce qui produit :

Quelques requêtes et leur effet ::

 

note : récupère le(s) plus jeune(s)