C# Academy · Les

Aggregaties en ToList

Tel op, bereken sommen en materialiseer.

Les 4 van 413 stappen

Aggregaties en ToList is een gratis C# Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 4 lessen.

Elementen tellen

Count retourneert het aantal elementen in een reeks. Met een predicaat telt het alleen elementen die aan de voorwaarde voldoen.

Het dwingt het doorlopen van de reeks af, dus de volledige reeks wordt doorlopen om het totaal te berekenen — het is een aggregatiebewerking.

using System;
using System.Linq;

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

Waarden optellen

Sum telt numerieke waarden bij elkaar op. Op een numerieke reeks telt het de elementen op; met een selectiefunctie telt het een geprojecteerde waarde van elk element op.

Het retourneert hetzelfde numerieke type als de bron of als het resultaat van de selectiefunctie.

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);

Gemiddelden berekenen

Average berekent het rekenkundige gemiddelde. Net als Sum accepteert het een optionele selectiefunctie.

Het resultaat is een type met drijvende komma, bijvoorbeeld double, ook als de bron gehele getallen bevat. Zo gaat er bij de deling geen precisie verloren.

using System;
using System.Linq;

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

Min en Max

Min en Max retourneren de kleinste en grootste waarden. Met een selectiefunctie verminderen ze de gegevens tot een geprojecteerde sleutel.

In moderne versies van .NET retourneren MaxBy en MinBy het volledige element met de uiterste sleutel, niet alleen de sleutelwaarde.

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);

Valkuilen bij lege reeksen

Op een lege reeks werpen Average, Min en Max voor waardetypen een InvalidOperationException. Sum retourneert nul en Count retourneert nul.

Controleer dit met Any() of gebruik DefaultIfEmpty vóór je mogelijk lege gegevens middelt.

using System;
using System.Linq;

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

Aggregate voor aangepaste vouwbewerkingen

Aggregate vouwt een reeks met een accumulatorfunctie samen tot één waarde. Het is de algemene vorm achter Sum en andere bewerkingen.

Je kunt een beginwaarde opgeven en elk element combineren met het lopende resultaat — handig voor producten, samenvoegingen of aangepaste logica.

using System;
using System.Linq;

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

Materialiseren met ToList

ToList voert de query onmiddellijk uit en kopieert de resultaten naar een List<T>. Hiermee schakel je de uitgestelde uitvoering bewust uit.

Gebruik dit om een stabiele momentopname te maken, te voorkomen dat een dure verwerkingsketen opnieuw wordt uitgevoerd of lijstfuncties zoals indexering en de eigenschap Count te gebruiken.

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 en ToDictionary

Verwante materialiseringsbewerkingen zijn onder andere ToArray voor een array met vaste grootte en ToDictionary voor opzoeken op basis van een sleutel.

ToDictionary accepteert een sleutelselectiefunctie en eventueel een waardeselectiefunctie. Er wordt een fout gegenereerd als twee elementen dezelfde sleutel opleveren.

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"]);

Waarom materialiseren

Uitgestelde queries worden elke keer opnieuw uitgevoerd wanneer je ze doorloopt. Als een verwerkingsketen veel kost of een veranderende bron leest, leidt die herhaling tot fouten en vertraging.

Als je één keer ToList aanroept, leg je de resultaten vast, zodat latere lezingen snel en consistent zijn.

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 en Any

Elementbewerkingen dwingen de uitvoering ook af. First retourneert de eerste overeenkomst en genereert een fout als er geen is, FirstOrDefault retourneert in plaats daarvan een standaardwaarde en Single vereist precies één overeenkomst.

Any vertelt je of een reeks een overeenkomend element bevat, zonder alle elementen te tellen.

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}");

Volledige verwerkingsketen

In echte queries worden filteren, projecteren, sorteren en aggregeren aan elkaar gekoppeld, vaak met een materialiseringsbewerking als laatste stap.

Lees de query van boven naar beneden: filter eerst, bepaal daarna de vorm, sorteer vervolgens en verzamel tot slot. De laatste ToList voert de volledige verwerkingsketen één keer uit.

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));

Snelle controle

Denk na over uitgestelde uitvoering en materialiseren.

Samenvatting

Aggregaties verminderen een reeks tot één waarde: Count, Sum, Average, Min/Max, MinBy/MaxBy en de algemene bewerking Aggregate. Ze dwingen de uitvoering af en kunnen fouten genereren bij lege bronnen.

ToList, ToArray en ToDictionary materialiseren resultaten. Daarmee wordt uitstel uitgeschakeld, zodat een dure verwerkingsketen één keer wordt uitgevoerd. Hiermee is de gereedschapskist voor filteren en projecteren met LINQ compleet.

Gratis beginnen

Leer C# met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
93
Lessen
346

Veelgestelde vragen

Is de les “Aggregaties en ToList” gratis?

Ja — de volledige tekst van “Aggregaties en ToList” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 4 lessen.

Wat leer ik in “Aggregaties en ToList”?

Tel op, bereken sommen en materialiseer. Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C# Academy te beginnen?

Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Aggregaties en ToList”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C# Academy?

Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Where en filteren
  2. Selecteren en projectie
  3. OrderBy en groeperen
  4. Aggregaties en ToList
← Terug naar C# Academy