C# Academy · Leçon

Agrégats et ToList

Comptez, additionnez et matérialisez les résultats.

Leçon 4 sur 413 étapes

Agrégats et ToList est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.

Compter les éléments

Count renvoie le nombre d'éléments d'une séquence. Avec un prédicat, il ne compte que les éléments correspondants.

Cette opération force l'énumération : la séquence entière est parcourue pour produire le total. Il s'agit d'une opération d'agrégation.

using System;
using System.Linq;

int[] nums = { 1, 2, 3, 4, 5 };
Console.WriteLine(nums.Count());
Console.WriteLine(nums.Count(n => n > 2));

Additionner des valeurs

Sum additionne des valeurs numériques. Sur une séquence numérique, il additionne les éléments ; avec un sélecteur, il additionne une valeur projetée pour chaque élément.

Il renvoie le même type numérique que la source ou que le résultat du sélecteur.

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

record Order(int Qty, decimal Price);
var orders = new List<Order> { new(2, 5m), new(3, 4m) };
decimal total = orders.Sum(o => o.Qty * o.Price);
Console.WriteLine(total);

Calculer une moyenne

Average calcule la moyenne arithmétique. Comme Sum, il accepte un sélecteur facultatif.

Le résultat est un type à virgule flottante, par exemple double, même lorsque la source contient des entiers : aucune précision n'est ainsi perdue lors de la division.

using System;
using System.Linq;

int[] scores = { 80, 90, 100 };
double avg = scores.Average();
Console.WriteLine(avg);

Min et Max

Min et Max renvoient respectivement les valeurs les plus petites et les plus grandes. Avec un sélecteur, ils réduisent une clé projetée.

Dans les versions modernes de .NET, MaxBy et MinBy renvoient l'élément entier associé à la clé extrême, et pas seulement la valeur de cette clé.

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

record P(string Name, int Age);
var ps = new List<P> { new("Ana", 30), new("Bo", 22) };
var oldest = ps.MaxBy(p => p.Age);
Console.WriteLine(oldest!.Name);

Pièges des séquences vides

Sur une séquence vide, Average, Min et Max appliqués à des types valeur lèvent une InvalidOperationException. Sum renvoie zéro et Count renvoie également zéro.

Effectuez une vérification avec Any() ou utilisez DefaultIfEmpty avant de calculer la moyenne de données potentiellement vides.

using System;
using System.Linq;

int[] empty = Array.Empty<int>();
double avg = empty.DefaultIfEmpty(0).Average();
Console.WriteLine(avg);

Aggregate pour des réductions personnalisées

Aggregate réduit une séquence à une seule valeur au moyen d'une fonction d'accumulation. Il s'agit de la forme générale qui sous-tend Sum et d'autres opérations.

Vous pouvez fournir une valeur initiale, puis combiner chaque élément avec le résultat en cours. C'est utile pour les produits, les concaténations ou une logique personnalisée.

using System;
using System.Linq;

int[] nums = { 1, 2, 3, 4 };
int product = nums.Aggregate(1, (acc, n) => acc * n);
Console.WriteLine(product);

Matérialiser avec ToList

ToList exécute immédiatement la requête et copie les résultats dans une List<T>. Cela interrompt volontairement l'exécution différée.

Utilisez-le pour prendre un instantané stable, éviter de relancer une chaîne de traitement coûteuse ou bénéficier des fonctionnalités d'une liste, comme l'indexation et la propriété Count.

using System;
using System.Linq;

int[] nums = { 1, 2, 3, 4 };
var evens = nums.Where(n => n % 2 == 0).ToList();
evens.Add(6);
Console.WriteLine(string.Join(", ", evens));

ToArray et ToDictionary

Parmi les autres opérations de matérialisation figurent ToArray, qui crée un tableau de taille fixe, et ToDictionary, qui permet une recherche par clé.

ToDictionary accepte un sélecteur de clé, ainsi qu'un sélecteur de valeur facultatif, et lève une exception si deux éléments produisent la même clé.

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

record P(string Name, int Age);
var ps = new List<P> { new("Ana", 30), new("Bo", 22) };
var byName = ps.ToDictionary(p => p.Name, p => p.Age);
Console.WriteLine(byName["Ana"]);

Pourquoi matérialiser

Les requêtes différées sont réexécutées chaque fois qu'elles sont parcourues. Si une chaîne de traitement est coûteuse ou lit une source qui change, ces répétitions entraînent des erreurs et ralentissent le programme.

Appeler ToList une seule fois capture les résultats afin que les lectures ultérieures soient rapides et cohérentes.

using System;
using System.Linq;

int runs = 0;
int[] nums = { 1, 2, 3 };
var list = nums.Select(n => { runs++; return n; }).ToList();
foreach (var _ in list) { }
foreach (var _ in list) { }
Console.WriteLine(runs);

First, Single et Any

Les opérateurs d'éléments forcent eux aussi l'exécution. First renvoie le premier élément correspondant et lève une exception s'il n'y en a aucun, FirstOrDefault renvoie plutôt une valeur par défaut, et Single exige qu'il y en ait exactement un.

Any indique si une séquence contient au moins un élément correspondant, sans devoir tous les compter.

using System;
using System.Linq;

int[] nums = { 3, 8, 5, 12 };
int firstBig = nums.First(n => n > 7);
bool hasOdd = nums.Any(n => n % 2 == 1);
Console.WriteLine($"{firstBig} {hasOdd}");

Chaîne de traitement complète

Les requêtes réelles enchaînent filtrage, projection, tri et agrégation, et se terminent souvent par une opération de matérialisation.

Lisez-les de haut en bas : filtrez, structurez les résultats, triez, puis rassemblez-les. Le ToList final exécute toute la chaîne de traitement une seule fois.

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

record Sale(string City, int Amt);
var sales = new List<Sale> { new("NY", 5), new("LA", 3), new("NY", 9) };
var top = sales.Where(s => s.Amt > 4)
               .OrderByDescending(s => s.Amt)
               .Select(s => s.City)
               .ToList();
Console.WriteLine(string.Join(", ", top));

Vérification rapide

Réfléchissez à l'exécution différée et à la matérialisation.

Récapitulatif

Les agrégations réduisent une séquence à une valeur : Count, Sum, Average, Min/Max, MinBy/MaxBy et l'opération générale Aggregate. Elles forcent l'exécution et peuvent lever une exception lorsque la source est vide.

ToList, ToArray et ToDictionary matérialisent les résultats, interrompant l'exécution différée afin qu'une chaîne de traitement coûteuse ne soit exécutée qu'une seule fois. Vous disposez maintenant de tous les outils LINQ de filtrage et de projection.

Gratuit pour commencer

Apprends C# avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
93
Leçons
346

Questions Fréquemment Posées

La leçon « Agrégats et ToList » est-elle gratuite ?

Oui — le texte complet de « Agrégats et ToList » 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 « Agrégats et ToList » ?

Comptez, additionnez et matérialisez les résultats. 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 4 sur 4.

Combien de temps prend la leçon « Agrégats et ToList » ?

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