LINQ Grundlagen in C# (Where, Select, OrderBy)
Lernen Sie LINQ-Grundlagen in C# mit Where, Select und OrderBy zum Filtern, Projizieren und Sortieren von Collections.
In C# ist LINQ (Language Integrated Query) ein leistungsstarkes Feature, das Abfragen auf Kollektionen und Datenquellen erleichtert.
Mit LINQ können Sie SQL-ähnliche Ausdrücke für Arrays, Listen, XML oder Datenbanken schreiben.
In diesem Artikel behandeln wir die grundlegenden LINQ-Operatoren: Where, Select und OrderBy.
Where
Die Methode Where filtert Elemente, die eine bestimmte Bedingung erfüllen.
Sie nimmt ein Prädikat entgegen (eine Funktion, die bool zurückgibt).
using System;
using System.Linq;
using System.Collections.Generic;
var zahlen = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Gerade Zahlen auswählen
var gerade = zahlen.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", gerade));
// Ausgabe: 2, 4, 6, 8, 10
Verzögerte Ausführung (Deferred Execution): Wenn Sie
var result = books.Where(...) schreiben, wird die Abfrage nicht sofort ausgeführt.
LINQ erstellt lediglich eine Abfragedefinition. Die Filterung erfolgt erst, wenn das Ergebnis
enumeriert wird (zum Beispiel mit foreach) oder wenn Methoden wie
ToList(), ToArray() oder Count() aufgerufen werden.
Beispiel für verzögerte Ausführung
var zahlen = new List<int>
{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
var gerade = zahlen.Where(n => n % 2 == 0);
// Sammlung nach der Definition der Abfrage verändern
zahlen.Add(11);
zahlen.Add(12);
zahlen.Add(13);
zahlen.Add(14);
// Die Abfrage wird hier ausgeführt
Console.WriteLine(string.Join(", ", gerade));
// Ausgabe: 2, 4, 6, 8, 10, 12, 14
Beachten Sie, dass 12 und 14 im Ergebnis enthalten sind,
obwohl sie nach der Where-Anweisung hinzugefügt wurden.
Das liegt daran, dass Where verzögerte Ausführung verwendet
und die Sammlung erst zum Zeitpunkt der Enumeration auswertet.
Select
Der Operator Select wird verwendet, um jedes Element einer Kollektion zu transformieren (Projektion).
Zum Beispiel können Sie Quadrate von Zahlen erzeugen oder nur bestimmte Eigenschaften von Objekten auswählen.
// Quadratzahlen
var quadrate = zahlen.Select(n => n * n);
Console.WriteLine(string.Join(", ", quadrate));
// Ausgabe: 1, 4, 9, 16, 25, 36, 49, 64, 81, 100
// Objektbeispiel
var studenten = new List<(int Id, string Name)>
{
(1, "Max"),
(2, "Anna"),
(3, "Lukas")
};
// Nur die Namen auswählen
var namen = studenten.Select(s => s.Name);
Console.WriteLine(string.Join(", ", namen));
// Ausgabe: Max, Anna, Lukas
OrderBy
Die Methode OrderBy sortiert Elemente nach einem angegebenen Schlüssel.
Standardmäßig wird aufsteigend sortiert. Für absteigende Sortierung verwenden Sie OrderByDescending.
var früchte = new List<string> { "Apfel", "Birne", "Banane", "Kiwi" };
// Alphabetisch sortieren
var sortiert = früchte.OrderBy(f => f);
Console.WriteLine(string.Join(", ", sortiert));
// Ausgabe: Apfel, Banane, Birne, Kiwi
// Nach Länge absteigend sortieren
var nachLänge = früchte.OrderByDescending(f => f.Length);
Console.WriteLine(string.Join(", ", nachLänge));
// Ausgabe: Banane, Apfel, Birne, Kiwi
Where + Select + OrderBy zusammen verwenden
LINQ-Operatoren werden oft verkettet verwendet. Im folgenden Beispiel: zuerst wird gefiltert, dann transformiert und schließlich sortiert.
var zahlen2 = new List<int> { 10, 3, 7, 8, 2, 15, 6 };
// Quadrate von Zahlen größer als 5, aufsteigend sortiert
var ergebnis = zahlen2
.Where(n => n > 5)
.Select(n => n * n)
.OrderBy(n => n);
Console.WriteLine(string.Join(", ", ergebnis));
// Ausgabe: 36, 49, 64, 100, 225
Beispielanwendung: Bücherliste
In diesem Szenario wird eine Bücherliste mit LINQ abgefragt:
Bücher mit mehr als 200 Seiten werden gefiltert (Where),
nur die Titel werden ausgewählt (Select),
und nach Titellänge sortiert (OrderBy).
public class Book
{
public string Title { get; set; } = string.Empty;
public int Pages { get; set; }
}
class Program
{
static void Main()
{
var bücher = new List<Book>
{
new Book { Title = "C# Programmierung", Pages = 350 },
new Book { Title = "LINQ Handbuch", Pages = 220 },
new Book { Title = "Kurzgeschichten", Pages = 120 },
new Book { Title = "Algorithmen", Pages = 400 }
};
var result = bücher
.Where(b => b.Pages > 200)
.Select(b => b.Title)
.OrderBy(t => t.Length);
Console.WriteLine("Ausgewählte Bücher:");
foreach (var title in result)
Console.WriteLine(title);
}
}
// Ausgabe:
// Ausgewählte Bücher:
// LINQ Handbuch
// C# Programmierung
// Algorithmen
Kurz & Knapp
Where: Filtert Elemente.Select: Transformiert (projiziert) Elemente.OrderBy: Sortiert Elemente (aufsteigend/absteigend).- Operatoren können verkettet werden:
Where → Select → OrderBy. - LINQ erleichtert das Schreiben von SQL-ähnlichen Abfragen auf Kollektionen.