To understand how LINQ to Objects works for in-memory queries over collections, you need a solid knowledge of C# 2.0 iterators. After introducing this language feature, we put it into practice by implementing a few iterators that behave like query operators. One key takeaway from the way iterators work is the concept of lazy evaluation.
Following the intermezzo on iterators, we explored the rich set of query operators in more depth, examining the behavior of those operators. Collectively known as the standard query operators, they form the heart of LINQ queries. Query expression syntax provided by languages such as C# turns into calls to those operator methods.
Because one of the things that LINQ allows is the capability to put the runtime ...