C# : LINQ's deferred execution, but how?