Wird geladen...

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.

Ähnliche Artikel