0Pricing
C# Academy · Lektion

Aggregationen und ToList

Zählen, summieren und materialisieren Sie Daten.

Aggregationen und ToList ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Elemente zählen

Count gibt die Anzahl der Elemente in einer Sequenz zurück. Mit einem Prädikat werden nur passende Elemente gezählt.

Die Methode erzwingt die Aufzählung, daher wird die gesamte Sequenz durchlaufen, um die Gesamtzahl zu ermitteln – es handelt sich um eine Aggregationsoperation.

using System;
using System.Linq;

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

Werte summieren

Sum addiert numerische Werte. Bei einer numerischen Sequenz werden die Elemente summiert; mit einem Selektor wird ein aus jedem Element projizierter Wert summiert.

Das Ergebnis hat denselben numerischen Typ wie die Quelle oder das Ergebnis des Selektors.

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

Werte mitteln

Average berechnet das arithmetische Mittel. Wie Sum akzeptiert die Methode optional einen Selektor.

Das Ergebnis ist ein Gleitkommatyp, zum Beispiel double, selbst wenn die Quelle Ganzzahlen enthält, damit bei der Division keine Präzision verloren geht.

using System;
using System.Linq;

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

Min und Max

Min und Max geben die kleinsten und größten Werte zurück. Mit einem Selektor reduzieren sie einen projizierten Schlüssel.

In modernem .NET geben MaxBy und MinBy das gesamte Element mit dem extremen Schlüssel zurück, nicht nur den Schlüsselwert.

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

Fallstricke bei leeren Sequenzen

Bei einer leeren Sequenz lösen Average, Min und Max für Werttypen eine InvalidOperationException aus. Sum gibt null zurück und Count ebenfalls null.

Sichern Sie sich mit Any() ab oder verwenden Sie vor dem Mitteln möglicherweise leerer Daten DefaultIfEmpty.

using System;
using System.Linq;

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

Aggregate für benutzerdefinierte Faltungen

Aggregate reduziert eine Sequenz mithilfe einer Akkumulatorfunktion auf einen Wert. Die Methode ist die allgemeine Form hinter Sum und anderen Aggregationen.

Sie können einen Startwert angeben und jedes Element in ein laufendes Ergebnis einbeziehen – nützlich für Produkte, Verkettungen oder benutzerdefinierte Logik.

using System;
using System.Linq;

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

Mit ToList materialisieren

ToList führt die Abfrage sofort aus und kopiert die Ergebnisse in eine List<T>. Dadurch wird die verzögerte Ausführung bewusst beendet.

Verwenden Sie die Methode, um eine stabile Momentaufnahme zu erstellen, die erneute Ausführung einer aufwendigen Pipeline zu vermeiden oder Listenfunktionen wie den Indexzugriff und die Count-Eigenschaft zu nutzen.

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

Zu den verwandten Materialisierungsmethoden gehören ToArray für ein Array fester Größe und ToDictionary für die schlüsselbasierte Suche.

ToDictionary verwendet einen Schlüssel-Selektor und optional einen Wert-Selektor. Die Methode löst eine Ausnahme aus, wenn zwei Elemente denselben Schlüssel erzeugen.

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

Warum materialisieren

Verzögert ausgeführte Abfragen werden bei jeder Iteration erneut ausgeführt. Wenn eine Pipeline aufwendig ist oder eine sich ändernde Quelle liest, führt diese Wiederholung zu Fehlern und einer langsameren Ausführung.

Ein einmaliger Aufruf von ToList erfasst die Ergebnisse, sodass spätere Lesevorgänge schnell und konsistent sind.

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

Auch Elementoperatoren erzwingen die Ausführung. First gibt das erste passende Element zurück und löst eine Ausnahme aus, wenn keines vorhanden ist; FirstOrDefault gibt stattdessen einen Standardwert zurück, und Single verlangt genau ein Element.

Any zeigt an, ob eine Sequenz ein passendes Element enthält, ohne alle Elemente zu zählen.

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

Die vollständige Pipeline

In realen Abfragen werden Filtern, Projektion, Sortierung und Aggregation miteinander verkettet und häufig mit einer Materialisierung abgeschlossen.

Lesen Sie die Abfrage von oben nach unten: filtern, dann projizieren, anschließend sortieren und zum Schluss sammeln. Das abschließende ToList führt die gesamte Pipeline einmal aus.

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

Schnelltest

Denken Sie über verzögerte Ausführung und Materialisierung nach.

Zusammenfassung

Aggregationen reduzieren eine Sequenz auf einen Wert: Count, Sum, Average, Min/Max, MinBy/MaxBy und die allgemeine Methode Aggregate. Sie erzwingen die Ausführung und können bei leeren Quellen eine Ausnahme auslösen.

ToList, ToArray und ToDictionary materialisieren Ergebnisse und beenden die verzögerte Ausführung, sodass eine aufwendige Pipeline nur einmal ausgeführt wird. Damit ist das LINQ-Werkzeugset zum Filtern und Projizieren vollständig.

Häufig gestellte Fragen

Ist die Lektion „Aggregationen und ToList“ kostenlos?

Ja — der vollständige Text von „Aggregationen und ToList“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Aggregationen und ToList“?

Zählen, summieren und materialisieren Sie Daten. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Aggregationen und ToList“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Where und Filtern
  2. Select und Projektion
  3. OrderBy und Gruppierung
  4. Aggregationen und ToList
← Zurück zu C# Academy