Where und Filtern
Wählen Sie passende Elemente aus.
Where und Filtern ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Was Where bewirkt
Where ist der zentrale LINQ-Operator zum Filtern. Er nimmt ein Prädikat – eine Funktion, die bool zurückgibt – und liefert nur die Elemente, die dieses Prädikat erfüllen.
Where befindet sich in System.Linq und funktioniert mit jedem IEnumerable<T>. Dabei wird eine neue Sequenz zurückgegeben, ohne die Quelle zu verändern.
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));Das Prädikat-Lambda
Das Argument von Where ist ein Lambda der Form n => condition. Der Parameter steht für jedes einzelne Element, und der Rumpf muss zu true oder false ausgewertet werden.
Bei true bleibt das Element erhalten, bei false wird es verworfen. Jeder boolesche Ausdruck ist zulässig.
using System;
using System.Linq;
string[] words = { "apple", "fig", "banana", "kiwi" };
var shortWords = words.Where(w => w.Length <= 4);
Console.WriteLine(string.Join(", ", shortWords));Abfragesyntax
LINQ bietet eine Abfragesyntax, die sich ähnlich wie SQL liest. Eine where-Klausel filtert, und select führt eine Projektion aus.
Sie wird in dieselben Methodenaufrufe kompiliert. Daher ist from x in src where ... select x identisch mit src.Where(...). Verwenden Sie die Variante, die besser lesbar ist.
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));Bedingungen kombinieren
Innerhalb eines einzelnen Prädikats können Sie mehrere Prüfungen mit && und || kombinieren. So bleibt die zusammengehörige Filterlogik in einem Durchlauf gebündelt.
Klammern verbessern die Lesbarkeit, wenn Sie Operatoren mischen, genau wie bei jedem booleschen Ausdruck.
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));Where-Aufrufe verketten
Sie können mehrere Where-Aufrufe verketten. Jeder filtert das Ergebnis des vorherigen, sodass die Bedingungen mit einem logischen UND kombiniert werden.
Eine Verkettung ist manchmal übersichtlicher als ein einziges großes Prädikat und ermöglicht es, an verschiedenen Stellen erstellte Filter zusammenzusetzen.
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 mit Index
Eine Überladung von Where stellt den nullbasierten Index des Elements als zweiten Lambda-Parameter bereit. Das ist praktisch für positionsabhängige Filter.
Verwenden Sie ihn beispielsweise, um jedes zweite Element zu behalten oder das erste Element anhand seines Index zu überspringen.
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));Objekte filtern
Beim Filtern von Objektsammlungen spielt Where seine Stärken aus. Das Prädikat kann auf jede Eigenschaft des jeweiligen Elements zugreifen.
So formulieren Sie Geschäftsregeln deklarativ – etwa „Kunden in dieser Stadt“ oder „Bestellungen über einem bestimmten Schwellenwert“.
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);Verzögerte Ausführung
Where verwendet eine verzögerte Ausführung: Der Operator wird nicht bei seiner Definition ausgeführt, sondern erst, wenn die Sequenz durchlaufen wird, etwa in einer foreach-Schleife oder durch den Aufruf von ToList.
Das bedeutet, dass Änderungen an der Quelle vor dem Durchlaufen im Ergebnis berücksichtigt werden.
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));Kosten der erneuten Auswertung
Da das Filtern verzögert erfolgt, wird das Prädikat bei zweimaligem Durchlaufen derselben Abfrage auch zweimal ausgeführt. Bei aufwendigen Prädikaten oder dynamischen Quellen kann das überraschend sein.
Wenn Sie eine stabile, wiederverwendbare Momentaufnahme benötigen, materialisieren Sie die Abfrage einmal mit ToList – darauf gehen wir später in diesem Kurs ein.
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);Erst filtern, dann zählen
Ein häufiges Muster besteht darin, zu filtern und anschließend die Anzahl der Treffer zu ermitteln. Count kann das Prädikat direkt entgegennehmen und Filtern und Zählen verbinden.
count.Count(p => cond) entspricht seq.Where(p => cond).Count(), ist aber kompakter.
using System;
using System.Linq;
int[] grades = { 55, 80, 42, 91, 67 };
int passed = grades.Count(g => g >= 60);
Console.WriteLine($"Passed: {passed}");Leere Ergebnisse sind in Ordnung
Wenn kein Element das Prädikat erfüllt, liefert Where einfach eine leere Sequenz – niemals null.
Dadurch lassen sich Filter sicher verketten: Ein leeres Ergebnis wird ohne besondere Behandlung an spätere Operatoren weitergegeben.
using System;
using System.Linq;
int[] nums = { 1, 2, 3 };
var big = nums.Where(n => n > 100);
Console.WriteLine($"Count: {big.Count()}");Kurzer Test
Testen Sie Ihr Verständnis der verzögerten Ausführung.
Zusammenfassung
Where filtert eine Sequenz mithilfe eines booleschen Prädikats und gibt ein neues IEnumerable zurück. Der Operator besitzt eine Überladung mit Index, kann verkettet oder mit &&/|| kombiniert werden und funktioniert bei Objekten über deren Eigenschaften.
Entscheidend ist die verzögerte Ausführung: Der Operator läuft erst beim Durchlaufen, sodass ein erneutes Durchlaufen das Prädikat erneut auswertet. Als Nächstes formen wir mit Select, was erhalten bleibt.
Lerne C# mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 93
- Lektionen
- 346
Häufig gestellte Fragen
Ist die Lektion „Where und Filtern“ kostenlos?
Ja — der vollständige Text von „Where und Filtern“ 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 „Where und Filtern“?
Wählen Sie passende Elemente aus. 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 1 von 4.
Wie lange dauert die Lektion „Where und Filtern“?
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
- Where und Filtern
- Select und Projektion
- OrderBy und Gruppierung
- Aggregationen und ToList