For what it's worth, a solution to the deferred disposal problem can be found here: Using IDisposables with LINQ. The filestream example would look like this:
IEnumerable<string> lines =
from fs in new Stream("...").Use()
from l in fs.ReadLines()
where l.Length > 256
foreach(var l in lines)
// fs will be disposed with the enumerator
The same approach can be used with a delegate to defer creation as well as disposal: () => new Stream("..."). A use keyword, a la F#, would be even better.