LINQ 1/5 : Filtrer des listes simplement

Présentation

Ordonner une liste, en extraire un élément, vérifier que tous les éléments respectent une condition, prendre les 3 premiers éléments, quels sont les éléments en commun entre 2 listes… On a tous eu besoin un jour d’effectuer des traitements de ce type sur des listes, tableaux ou collections.

En général, on pense à une boucle For ou ForEach pour réaliser ces manipulations. Dans son framework .NET, Microsoft nous propose LINQ (Language Integrated Query), qui offre des méthodes supplémentaires permettant d’effectuer en une seule ligne ces traitements sur des listes, des collections, des tableaux et même des jeux provenant d’une source de données.

Voici un exemple qui vérifie si le code de chaque client d’une liste est différent de 0.
Avec une boucle:

bool enBDD = true;

foreach(Client client in clients)
{
   // Un code auto-incrémenté en base de données ne peut pas être égal à 0
   if(client.Id == 0)
   {
      enBDD = false;
      break;
   }
}

Avec une expression Linq:

bool enBDD = clients.All(c => c.Id != 0);

Le résultat retourné sera le même. Comme vous pouvez le voir, l’intérêt de Linq est d’apporter plus de clarté dans votre code puisque ce dernier devient moins volumineux.

Linq est disponible pour la quasi-totalité des plateformes Microsoft.

Notez que, bien entendu, tous les traitements faits dans des boucles ne sont pas forcément simplifiables avec une expression Linq. Voici le plan que je vous propose:

using System.Linq

Pour utiliser Linq, il vous faut intégrer le namespace System.Linq.

using System.Linq;

Voyons ce que l’Intellisense nous propose :
Méthodes avec Linq

Toutes les méthodes avec une flèche et un cube noir représentent des méthodes d’extension fournies par Linq.

Les méthodes d’extension permettent d’ajouter des méthodes supplémentaires à des classes existantes auxquels vous n’avez pas accès par exemple (je pense notamment à celles du framework .NET ou d’autres classes pouvant être contenues dans une bibliothèque extérieure).
Celà ressemble un peu à de l’héritage, à la différence que vous n’ayez pas accès aux membres privés et protégés (protected) de ces objets, mais l’intérêt est que vous appelez tout de même ces méthodes via ces derniers.

Dans notre cas, la référence System.Linq ajoute des méthodes d’extension pour l’interface IEnumerable. Cette inteface est implementée par les tableaux, les listes et les collections.

L’ajout de la référence System.Linq est important. En effet, nombreuses sont les fois où je me suis fait avoir car je n’accès pas accès à toutes les méthodes. Si vous oubliez de préciser le using, vous aurez moins de choix :
En oubliant d'ajouter System.Linq

Je vous invite à lire la seconde partie traitant sur les méthodes conditionnelles.

Bonne lecture !

Lien Permanent pour cet article : https://www.jbvigneron.fr/parlons-dev/linq-filtrer-des-listes-simplement/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Verified by MonsterInsights