I ran across an awesome code sample written by Jon Skeet. He realized that many people may have difficulty understanding how the lazy evaluation in LINQ (and programming with iterator combinators in general) works. His program/code sample is able make the lazy evaluation clear by animating it on the fly. He intercepts each step in the LINQ evaluation and animates that step. When the program runs you will see one element at a time be processed through the LINQ query.
I definitely recommend taking a look:
Kudos to Jon on a job well done.