Leçon 18 - LINQ et Requêtes

30 minutes Avancé P4 - Collections avancées

Maîtrisez LINQ pour interroger et manipuler vos collections de données facilement.

Qu'est-ce que LINQ ?

LINQ (Language Integrated Query) permet de filtrer, trier et transformer des données directement en C#. C'est comme SQL mais intégré dans le langage.

C#
using System.Linq; var nombres = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // Filtrer les nombres pairs var pairs = nombres.Where(n => n % 2 == 0); Console.WriteLine("Nombres pairs: " + string.Join(", ", pairs)); // Affiche: Nombres pairs: 2, 4, 6, 8, 10

Opérations de base

Where - Filtrer

Sélectionner seulement certains éléments :

C#
var prenoms = new List<string> { "Alice", "Bob", "Charlie", "David", "Emma" }; // Prénoms qui commencent par 'A' var avecA = prenoms.Where(p => p.StartsWith("A")); // Prénoms de plus de 4 lettres var longs = prenoms.Where(p => p.Length > 4); Console.WriteLine("Avec A: " + string.Join(", ", avecA)); // Alice Console.WriteLine("Longs: " + string.Join(", ", longs)); // Alice, Charlie, David

Select - Transformer

Modifier les éléments d'une liste :

C#
var nombres = new List<int> { 1, 2, 3, 4, 5 }; // Doubler chaque nombre var doubles = nombres.Select(n => n * 2); // Créer des phrases var phrases = nombres.Select(n => $"Le nombre {n}"); Console.WriteLine(string.Join(", ", doubles)); // 2, 4, 6, 8, 10

OrderBy - Trier

Mettre les éléments dans l'ordre :

C#
var prenoms = new List<string> { "Charlie", "Alice", "Bob" }; // Ordre alphabétique var triés = prenoms.OrderBy(p => p); // Ordre inverse var inversés = prenoms.OrderByDescending(p => p); Console.WriteLine(string.Join(", ", triés)); // Alice, Bob, Charlie Console.WriteLine(string.Join(", ", inversés)); // Charlie, Bob, Alice

Chaîner les opérations

Vous pouvez combiner plusieurs opérations :

C#
var nombres = Enumerable.Range(1, 20); // 1 à 20 // Nombres pairs, doublés, triés par ordre décroissant, prendre les 5 premiers var résultat = nombres .Where(n => n % 2 == 0) // Filtrer les pairs .Select(n => n * 2) // Doubler .OrderByDescending(n => n) // Trier décroissant .Take(5); // Prendre 5 Console.WriteLine(string.Join(", ", résultat)); // Affiche: 40, 36, 32, 28, 24

Calculs avec LINQ

Effectuer des calculs sur des listes :

C#
var notes = new List<int> { 15, 18, 12, 20, 14 }; int total = notes.Sum(); // 79 double moyenne = notes.Average(); // 15.8 int max = notes.Max(); // 20 int min = notes.Min(); // 12 int count = notes.Count(); // 5 Console.WriteLine($"Total: {total}"); Console.WriteLine($"Moyenne: {moyenne:F1}"); Console.WriteLine($"Meilleure note: {max}"); // Notes supérieures à la moyenne var bonnesNotes = notes.Where(n => n > moyenne); Console.WriteLine($"Bonnes notes: {string.Join(", ", bonnesNotes)}");

LINQ avec des objets

Utiliser LINQ sur des listes d'objets :

C#
class Produit { public string Nom { get; set; } public decimal Prix { get; set; } public string Categorie { get; set; } } var produits = new List<Produit> { new Produit { Nom = "Laptop", Prix = 999, Categorie = "Informatique" }, new Produit { Nom = "Souris", Prix = 29, Categorie = "Informatique" }, new Produit { Nom = "Bureau", Prix = 299, Categorie = "Mobilier" }, new Produit { Nom = "Chaise", Prix = 199, Categorie = "Mobilier" } }; // Produits informatiques moins de 100€ var informatiquePasChers = produits .Where(p => p.Categorie == "Informatique" && p.Prix < 100) .Select(p => p.Nom); // Prix moyen par catégorie var prixMoyenInformatique = produits .Where(p => p.Categorie == "Informatique") .Average(p => p.Prix); // Produit le plus cher var plusCher = produits.OrderByDescending(p => p.Prix).First(); Console.WriteLine($"Produit le plus cher: {plusCher.Nom} à {plusCher.Prix}€");
📋 Méthodes LINQ essentielles :
  • Where : Filtrer
  • Select : Transformer
  • OrderBy / OrderByDescending : Trier
  • First / FirstOrDefault : Premier élément
  • Take / Skip : Prendre/Ignorer N éléments
  • Sum / Average / Min / Max / Count : Calculs
  • Any / All : Vérifier conditions

Exercice pratique

Créez une liste d'étudiants avec leurs notes, et calculez la moyenne de la classe :