Wissen von A bis Z

LINQ

LINQ ist die Schweizer Taschenmesser-Abfragesprache, die dafür sorgt, dass C# fließend SQL, XML und JSON spricht.

LINQ (Language Integrated Query) ist die in C#, VB.NET und F# integrierte Abfragesprache der .NET-Plattform. Sie erlaubt es, Daten aus unterschiedlichsten Quellen — In-Memory-Collections, XML-Dokumenten, relationalen Datenbanken, JSON-Strukturen, REST-APIs — mit einer einheitlichen, typsicheren Syntax zu filtern, zu projizieren, zu gruppieren und zu aggregieren. Technisch besteht LINQ aus Spracherweiterungen (Erweiterungsmethoden, Lambda-Ausdrücke, anonyme Typen, Expression Trees) und einem Satz von Standardoperatoren wie Where, Select, GroupBy, Join, OrderBy, Aggregate.

Eingesetzt wird LINQ in nahezu jedem modernen .NET-Projekt: in Geschäftslogik mit LINQ to Objects, beim Datenzugriff mit LINQ to Entities (Entity Framework Core), in der XML-Verarbeitung mit LINQ to XML, in Parallelisierungsszenarien mit Parallel LINQ (PLINQ) sowie in reaktiven Pipelines mit Reactive Extensions (Rx). Provider außerhalb von Microsoft bringen LINQ-Frontends auf MongoDB, Elasticsearch, Cosmos DB und viele weitere Datenbanken.

Der Einsatzzweck und das gelöste Problem ergeben sich aus der historischen Trennung zwischen Programmiersprache und Datenzugriff. Vor LINQ wurden SQL-Statements als Strings konkateniert, XPath-Ausdrücke als Strings übergeben, In-Memory-Filterung mit Schleifen und Hilfsfunktionen umgesetzt. Das war fehleranfällig, refactoring-feindlich und ohne Compile-Zeit-Prüfung. LINQ behebt das, indem Abfragen Teil der Sprache werden: Compiler und IDE prüfen Typen, IntelliSense schlägt Operatoren vor, Refactorings ändern Variablennamen konsistent über Domänen- und Datenzugriffsschicht hinweg.

Historisch wurde LINQ mit C# 3.0 und dem .NET Framework 3.5 (November 2007) eingeführt, gemeinsam mit Lambda-Ausdrücken, Erweiterungsmethoden, anonymen Typen, var und Expression Trees — alle Sprachfeatures, die LINQ technisch erst möglich machen. Aufbauende Erweiterungen sind PLINQ und Tasks (.NET 4.0, 2010), async Streams mit IAsyncEnumerable (C# 8, 2019) und seither kontinuierliche Performance- und Komfortverbesserungen, etwa neue Operatoren wie Chunk, MaxBy, MinBy oder die Index/Range-Erweiterungen.

Eingeführt wurde LINQ von Microsoft unter Federführung von Anders Hejlsberg, Erik Meijer und Mads Torgersen. Erik Meijer, der ursprünglich aus der funktionalen Forschung um Haskell kommt, brachte mit LINQ Ideen aus der Monaden-Theorie in einen vermeintlich pragmatischen Sprachkontext ein. LINQ gilt deshalb als bekanntestes Beispiel dafür, wie wesentliche Konzepte funktionaler Sprachen erfolgreich in eine Mainstream-Industrieumgebung überführt wurden — viele heute selbstverständliche Features anderer Sprachen (Stream-API in Java, Sequences in Kotlin) sind direkte Antworten auf LINQ.

Zurück