0Pricing
C# Academy · Leçon

WHERE et filtrage

Sélectionnez les éléments correspondants.

WHERE et filtrage est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Ce que fait Where

Where est l’opérateur principal de filtrage de LINQ. Il reçoit un prédicat — une fonction qui renvoie bool — et ne produit que les éléments qui le satisfont.

Il se trouve dans System.Linq et fonctionne avec tout IEnumerable<T>, en renvoyant une nouvelle séquence sans modifier la source.

using System;
using System.Linq;
using System.Collections.Generic;

var nums = new List<int> { 1, 2, 3, 4, 5, 6 };
var evens = nums.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", evens));

La lambda du prédicat

L’argument de Where est une lambda n => condition. Le paramètre représente chaque élément et le corps doit donner true ou false.

Renvoyer true conserve l’élément ; false le supprime. Toute expression booléenne convient.

using System;
using System.Linq;

string[] words = { "apple", "fig", "banana", "kiwi" };
var shortWords = words.Where(w => w.Length <= 4);
Console.WriteLine(string.Join(", ", shortWords));

Forme syntaxique des requêtes

LINQ propose une syntaxe de requête qui ressemble à SQL. Une clause where filtre et select effectue une projection.

Elle est compilée en appels aux mêmes méthodes : from x in src where ... select x est identique à src.Where(...). Utilisez la forme la plus lisible.

using System;
using System.Linq;

int[] scores = { 40, 75, 90, 55, 88 };
var passing = from s in scores
              where s >= 60
              select s;
Console.WriteLine(string.Join(", ", passing));

Combiner les conditions

Dans un même prédicat, vous pouvez combiner plusieurs vérifications avec && et ||. Cela permet d’effectuer le filtrage associé en un seul parcours.

Les parenthèses améliorent la lisibilité lorsque vous mélangez les opérateurs, comme dans toute expression booléenne.

using System;
using System.Linq;
using System.Collections.Generic;

var ages = new List<int> { 12, 17, 21, 35, 64, 70 };
var adults = ages.Where(a => a >= 18 && a < 65);
Console.WriteLine(string.Join(", ", adults));

Enchaîner les appels à Where

Vous pouvez enchaîner plusieurs appels à Where. Chacun filtre le résultat du précédent, de sorte que les conditions se combinent avec un AND logique.

L’enchaînement est parfois plus clair qu’un prédicat unique trop volumineux et vous permet de composer des filtres construits à différents endroits.

using System;
using System.Linq;

int[] data = { 3, 8, 15, 22, 27, 40 };
var result = data.Where(n => n > 5)
                 .Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", result));

Where avec un indice

Une surcharge de Where expose l’indice de l’élément, commençant à zéro, comme second paramètre de la lambda. C’est pratique pour filtrer selon la position.

Utilisez-la pour conserver, par exemple, un élément sur deux ou ignorer le premier élément selon son indice.

using System;
using System.Linq;

string[] items = { "a", "b", "c", "d", "e" };
var evenIdx = items.Where((val, idx) => idx % 2 == 0);
Console.WriteLine(string.Join(", ", evenIdx));

Filtrer des objets

Le filtrage est particulièrement utile avec les collections d’objets. Le prédicat peut lire n’importe quelle propriété de chaque élément.

C’est ainsi que vous exprimez déclarativement des règles métier — « les clients de cette ville », « les commandes dépassant un seuil ».

using System;
using System.Linq;
using System.Collections.Generic;

record Product(string Name, decimal Price);
var list = new List<Product> {
  new("Pen", 1.5m), new("Lamp", 20m), new("Mug", 8m) };
var cheap = list.Where(p => p.Price < 10);
foreach (var p in cheap) Console.WriteLine(p.Name);

Exécution différée

Where utilise l’exécution différée : il ne s’exécute pas au moment de sa définition, mais uniquement lorsque la séquence est parcourue, par exemple dans un foreach ou en appelant ToList.

Cela signifie que les modifications apportées à la source avant le parcours sont reflétées dans le résultat.

using System;
using System.Linq;
using System.Collections.Generic;

var src = new List<int> { 1, 2 };
var q = src.Where(n => n > 1);
src.Add(5);
Console.WriteLine(string.Join(", ", q));

Coût de la réévaluation

Comme le filtrage est différé, parcourir deux fois la même requête réexécute deux fois le prédicat. Cela peut vous surprendre avec des prédicats coûteux ou des sources dynamiques.

Lorsque vous avez besoin d’un instantané stable et réutilisable, matérialisez-le une fois avec ToList — nous verrons cela plus loin dans ce cours.

using System;
using System.Linq;

int calls = 0;
int[] nums = { 1, 2, 3 };
var q = nums.Where(n => { calls++; return n > 1; });
foreach (var _ in q) { }
foreach (var _ in q) { }
Console.WriteLine(calls);

Filtrer puis compter

Un schéma courant consiste à filtrer, puis à demander combien d’éléments correspondent. Count peut recevoir directement un prédicat, ce qui fusionne le filtrage et le comptage.

count.Count(p => cond) est équivalent à seq.Where(p => cond).Count(), mais sa lecture est plus concise.

using System;
using System.Linq;

int[] grades = { 55, 80, 42, 91, 67 };
int passed = grades.Count(g => g >= 60);
Console.WriteLine($"Passed: {passed}");

Les résultats vides sont acceptables

Si aucun élément ne satisfait le prédicat, Where produit simplement une séquence vide — jamais null.

Les filtres peuvent ainsi être enchaînés en toute sécurité : un résultat vide est transmis aux opérateurs suivants sans traitement particulier.

using System;
using System.Linq;

int[] nums = { 1, 2, 3 };
var big = nums.Where(n => n > 100);
Console.WriteLine($"Count: {big.Count()}");

Vérification rapide

Vérifiez votre compréhension de l’exécution différée.

Récapitulatif

Where filtre une séquence avec un prédicat booléen et renvoie un nouvel IEnumerable. Il possède une surcharge avec indice, peut être enchaîné ou combiné avec &&/||, et fonctionne sur les objets par l’intermédiaire de leurs propriétés.

Point essentiel : son exécution est différée — il s’exécute lors du parcours, de sorte qu’un nouveau parcours réévalue le prédicat. Nous allons maintenant définir la forme des éléments conservés avec Select.

Questions Fréquemment Posées

La leçon « WHERE et filtrage » est-elle gratuite ?

Oui — le texte complet de « WHERE et filtrage » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « WHERE et filtrage » ?

Sélectionnez les éléments correspondants. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « WHERE et filtrage » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. WHERE et filtrage
  2. SELECT et projection
  3. OrderBy et regroupement
  4. Agrégats et ToList
← Retour à C# Academy