LINQ – Eine Syntax für alle Abfragen in C#

LINQ – Eine Syntax für alle Abfragen in C#
05/2026
Stefan J. | Solution Engineer

TL;DR

LINQ bietet mit Query- und Methoden-Syntax zwei Ansätze zur Datenabfrage in C#. Viele Teams nutzen jedoch nur eine Variante – oft zulasten der Lesbarkeit.

LINQ: Eine Syntax für alles

LINQ (Language Integrated Query) ermöglicht es, Datenquellen wie Collections, Datenbanken oder XML direkt in C# abzufragen, typsicher und ohne separate Query-Sprache. Seit C# 3.0 stehen dafür zwei Schreibweisen zur Verfügung: die Query-Syntax und die Methoden-Syntax. Wer beide Varianten kennt und situativ einsetzt, schreibt Code, der nicht nur funktioniert, sondern auch für andere Entwickler sofort verständlich ist.

‍

Das Problem: Eine Syntax für alles

In der Praxis zeigt sich häufig Code, der konsequent nur eine LINQ-Variante verwendet, unabhängig davon, ob sie für den konkreten Anwendungsfall geeignet ist. Häufig wird die Methoden-Syntax eingesetzt, da sie in vielen Beispielen zuerst erscheint und schnell vertraut wirkt. Das Ergebnis sind Abfragen, die eigentlich einfach sein könnten, aber unnötig schwer lesbar werden. Komplexe Joins werden in die Methoden-Syntax gezwungen, obwohl die Query-Syntax hier besser geeignet wäre.

Das ist kein kritisches Problem, führt jedoch zu Mehraufwand, etwa im Code-Review, beim Onboarding neuer Teammitglieder oder bei der späteren Wartung.

Die Methoden-Syntax basiert auf Extension Methods und Lambda-Ausdrücken. Sie ist flexibel, deckt den vollständigen LINQ-Funktionsumfang ab und lässt sich gut mit modernem C#-Code kombinieren.

Die Query-Syntax orientiert sich bewusst an SQL. Dadurch ist sie besonders geeignet, wenn Datenbeziehungen im Vordergrund stehen. Wichtig ist jedoch, dass nicht jeder Operator in der Query-Syntax verfügbar ist.

Es gibt nicht die eine richtige Syntax. Entscheidend ist die situativ passende Wahl.

Bei einfachen Abfragen ist die Methoden-Syntax kompakter und benötigt keinen zusätzlichen Overhead.

‍

1// Methoden-Syntax 
2var offeneRechnungenMethod = rechnungen 
3    .Where(r => r.KundenId == kundeId && r.Status == RechnungsStatus.Offen) 
4    .OrderBy(r => r.Faelligkeitsdatum); 
5
6// Query-Syntax 
7var offeneRechnungenQuery = 
8    from r in rechnungen 
9    where r.KundenId == kundeId && r.Status == RechnungsStatus.Offen 
10    orderby r.Faelligkeitsdatum 
11    select r;

‍

Sobald ein Join erforderlich ist, bietet die Query-Syntax klare Vorteile, da sie Beziehungen zwischen Datenquellen direkt sichtbar macht. Die Methoden-Syntax wird hier schnell unübersichtlich durch verschachtelte Lambda-Ausdrücke.

‍

1 // Methoden-Syntax 
2var kundenMitProjektenMethod = kunden 
3    .Join(projekte, 
4          k => k.Id, 
5          p => p.KundenId, 
6          (k, p) => new { Kunde = k, Projekt = p }) 
7    .Where(x => x.Projekt.Status == ProjektStatus.Aktiv) 
8    .Select(x => new 
9    { 
10        Kunde   = x.Kunde.Name, 
11        Projekt = x.Projekt.Bezeichnung, 
12        Start   = x.Projekt.Startdatum 
13    }); 
14
15// Query-Syntax 
16var kundenMitProjektenQuery = 
17    from k in kunden 
18    join p in projekte on k.Id equals p.KundenId 
19    where p.Status == ProjektStatus.Aktiv 
20    select new 
21
22    { 
23        Kunde   = k.Name, 
24        Projekt = p.Bezeichnung, 
25        Start   = p.Startdatum 
26    }; 

‍

Faustregel für den Alltag:

  • Einfache Filter, Sortierungen und Projektionen: Methoden-Syntax
  • Joins und mehrere Datenquellen: Query-Syntax

‍

Fazit

Wer nur eine Variante kennt, schränkt sich selbst ein. Beide zu beherrschen erfordert wenig Aufwand und zahlt sich schnell aus.

In der Praxis werden beide Varianten situativ eingesetzt. Die Methoden-Syntax ist häufig kompakter und fügt sich gut in bestehenden Code ein, während die Query-Syntax bei komplexeren Joins die Lesbarkeit deutlich verbessert.

Es handelt sich nicht um eine Grundsatzentscheidung, sondern um die Wahl des passenden Werkzeugs. Wer dies berücksichtigt, entwickelt klareren und wartbareren Code.

Empfehlung:
Im nächsten Code-Review kann gezielt geprüft werden, ob eine alternative LINQ-Syntax die Lesbarkeit verbessert. Der Aufwand ist gering, der Effekt jedoch nachhaltig.

Stefan J. | Solution Engineer
Stefan J. | Solution Engineer

Entwickler-Schulung

Diese Beiträge entstehen aus der täglichen Arbeit unserer Entwicklerinnen und Entwickler. Devware gibt dieses Wissen auf Anfrage auch als Schulung weiter, zu .NET, Blazor und anderen Sprachen.
Pfeil-Icon – Mehr erfahren

Mehr zum Thema

Pfeil nach rechts (Verlinkung)
Unittests in C#
09/2026

Unittests in C#

Blauer Pfeil nach rechts (Verlinkung)
MCP-Server in C# bauen
09/2026

MCP-Server in C# bauen

Blauer Pfeil nach rechts (Verlinkung)
Mirror-Shape-Pattern für Blazor EditForm
09/2026

Mirror-Shape-Pattern für Blazor EditForm

Blauer Pfeil nach rechts (Verlinkung)
EU AI Act: was er für den Mittel­stand bedeutet
09/2026

EU AI Act: was er für den Mittel­stand bedeutet

Blauer Pfeil nach rechts (Verlinkung)