In was wird LINQ tatsächlich kompiliert?

Hintergrund

Der Hintergrund hierfür ist, dass ich kürzlich in den Kommentaren ein Gespräch mit einem anderen, gut informierten Benutzer über die Kompilierung von LINQ geführt habe. Ich habe zuerst "zusammengefasst" und gesagt, LINQ wurde zu einer for-Schleife kompiliert. Dies ist zwar nicht korrekt, mein Verständnis von anderen Stapeln wiedieses ist, dass die LINQ-Abfrage zu einem Lambda kompiliert wird, in dem sich eine Schleife befindet. Dies wird dann aufgerufen, wenn die Variable zum ersten Mal aufgezählt wird (danach werden die Ergebnisse gespeichert). Der andere Benutzer sagte, dass LINQ zusätzliche Optimierungen wie Hashing vornimmt. Ich konnte weder dafür noch dagegen eine unterstützende Dokumentation finden.

Ich weiß, dass dies ein sehr dunkler Punkt ist, aber ich hatte immer das Gefühl, dass es schwierig sein wird, zu verstehen, warum ich etwas nicht richtig benutze, wenn ich nicht verstehe, wie etwas vollständig funktioniert.

Die Frage

Nehmen wir also das folgende sehr einfache Beispiel:

var productNames = 
    from p in products 
    where p.Id > 100 and p.Id < 5000
    select p.ProductName;

Was ist diese Aussagetatsächlich in CLR kompiliert? Welche Optimierungen übernimmt LINQ, wenn ich nur eine Funktion schreibe, die die Ergebnisse manuell analysiert? Ist das nur Semantik oder steckt mehr dahinter?

Klärung

Klar stelle ich diese Frage, weil ich nicht verstehe, wie das Innere der LINQ "Black Box" aussieht. Obwohl ich verstehe, dass LINQ kompliziert (und leistungsfähig) ist, suche ich hauptsächlich ein grundlegendes Verständnis der CLR oder eines funktionalen Äquivalents zu einer LINQ-Anweisung. Es gibt großartige Websites, auf denen Sie nachvollziehen können, wie eine LINQ-Anweisung erstellt wird, aber nur wenige davon scheinen Anleitungen zu geben, wie diese tatsächlich kompiliert oder ausgeführt werden.

Randnotiz - Ich werde die John Skeet-Reihe auf linq to objects unbedingt durchlesen.

Randnotiz 2 - Ich hätte dies nicht als LINQ to SQL markieren sollen. Ich verstehe, wie ORMs und Mikro-ORMs funktionieren. Das steht wirklich außer Frage.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage