Что такое LINQ на самом деле скомпилированный?

Фон

Основанием для этого является то, что я недавно беседовал в комментариях с другим хорошо осведомленным пользователем о том, как компилируется LINQ. Я первый "суммированы» и сказал, что LINQ был скомпилирован в цикл for. Пока это неПравильно, мое понимание из других стеков, таких какэтот заключается в том, что запрос LINQ компилируется в лямбду с циклом внутри него. Затем он вызывается, когда переменная перечисляется впервые (после чего результаты сохраняются). Другой пользователь сказал, что LINQ требует дополнительных оптимизаций, таких как хеширование. Я не могНайти любую подтверждающую документацию за или против.

Я знаю, что это кажется очень неясным, но я всегда чувствовал, что если я нене понимаю, как что-то работает полностью, будет трудно понять, почему яЯ не использую это правильно.

Вопрос

Итак, давайте рассмотрим следующий очень простой пример:

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

Что это за утверждениена самом деле скомпилировано в CLR? Какие оптимизации берет на себя LINQ, просто написав функцию, которая анализирует результаты вручную? Это просто семантика или есть что-то большее?

осветление

Я ясноя задаю этот вопрос, потому что я нене понимаю, что внутри LINQ "черный ящик" похоже. Хотя я понимаю, что LINQ сложный (и мощный), яЯ в основном ищу базовое понимание CLR или функционального эквивалента оператора LINQ. Существуют отличные сайты, помогающие понять, как создать оператор LINQ, но очень немногие из них дают какие-либо указания о том, как они на самом деле компилируются или выполняются.

Примечание - Я абсолютно прочитаю серию John Skeet по linq объектам.

Примечание 2 - Я не долженя отметил это как LINQ to SQL. Я понимаю, как ORM 'с и микро-ORM 'с работой. Это действительно помимо сути вопроса.

Ответы на вопрос(2)

Ваш ответ на вопрос