Ich habe mal eine Videoserie erstellt, die genau im Detail erklärt, wie LinQ (Language-integrated Query) in .NET eigentlich genau funktioniert und auf welchen Mechanismen es aufbaut.

Denn nur wenn man weiß, wie was auf einem Raumschiff funktioniert, kann man Khan besiegen! 😉

Am besten guckt man sich die folgenden Videos direkt bei Youtube in der höchsten Auflösung und als Vollbild an. Ab Video 2 habe ich dann auch die Schrift im Visual Studio selbst größer gemacht, zwecks besserer Lesbarkeit.

Kapitel 1: IEnumerable
Kapitel 2: Yield Return
Kapitel 3: Funktionsdelegaten
Kapitel 4: Extension Methods
Kapitel 5: LinQ: Where
Kapitel 6: LinQ: Select, Any, All, Count, Except, Take

Deshalb fangen wir damit an, das Interface zu untersuchen, den jede Liste, jede Collection in .NET implementiert: IEnumerable

Code aus diesem Video

Eines der wichtigsten Statements im Zusammenspiel mit LinQ ist “yield return” und “yield break”.

Da im Hintergrund vom C# Compiler hier jede Menge Code geniert wird, sollten wir mal genauer drauf gucken, was genau eigentlich passiert.

Code aus diesem Video

.NET Reflector
ILSpy

Ein weiteres wichtiges Element zum Verständnis von LinQ sind Funktionsdelegaten, unter C++ auch als “function pointer” bekannt.

Folien aus diesem Video

Code aus diesem Video

Und das letzte notwendige Grundlagenwissen für LinQ: Extension Methods. Was sie sind, was sie tun.

Code aus diesem Video

Jetzt geht es ans Eingemachte: In diesem Video werden wir mal erforschen, wie Where im Allgemeinen funktioniert und wie es eingesetzt wird.
Dann aber gehen wir richtig ins Detail und schreiben uns unsere eigene Implementierung von Where, um zu sehen, warum sich der Code so verhält, wie er es tut.

Code aus diesem Video

Und in diesem abschließenden Kapitel gucken wir uns mal die LinQ-Funktionen Select, Any, All, Count, Except und Take an und finden heraus, was sie genau tun und wofür sie gut sind.

Except: 0:40
Select: 4:57
Any: 7:33
Count: 14:28
All: 17:48
Take: 22:48

Code aus diesem Video

PS: Ich bin ein leidlich guter Programmierer, aber kein Videoschnittmeister, deshalb müsst ihr leider mit den “ähms” leben. 😉