
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 (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.
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 };
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.

Unser Geschäftsführer Tibor Csizmadia und unser Kundenbetreuer Jens Walter stehen Ihnen persönlich zur Verfügung. Profitieren Sie von unserer langjährigen Erfahrung und erhalten Sie eine kompetente Beratung in einem unverbindlichen Austausch.