I still think extension methods were a hack to make LINQ work - much like the Java hack of replacing specific objects with generic objects to make generics work (I don't know much about the internals of Java, so someone correct me if I am off the mark on this one).
Absolutely true, as far as I am concerned. It's all a set of hacks to allow the results of inherently dynamic and loosely-typed SQL queries to be manipulated as objects at runtime. There was an interesting comment from Lippert in one of the pieces linked above, to the effect of "Don't get all OO-happy on us; we're not about creating the purest language, but rather one that helps our customers get stuff done."
I hear that, and the days when I enjoyed language-lawyering are long gone. But I still feel that every relaxation on the constraints of a strong static typing system introduces potential for errors at runtime that are difficult to pin down. So, if you buy that POV, then you look at LINQ and ask whether it is worth driving all these workarounds in the language? I never had a problem with integrating SQL into my applications, and in fact I like that there is a clean separation between the app, and the stuff that makes the database go. They're different animals.
I have a feeling that the main effects of LINQ will be to make database interaction more approachable for some people (good); while at the same time making it harder to perceive the differences between the layers, to clearly distinguish the code that moves the data back and forth from the app logic (bad).
And on the other hand I have a ton of respect for Microsoft's language designers and .NET platform architects, and a lot of people really dig LINQ, so I may just be an old curmudgeon on this one. Maybe not so different from the C guys I was trying to teach C++ to back in the 90's

.