Sure fits the specific scenario better, but wanted to display the linq power, this is specific so something like string.join can be done in C++ too, my take on this is linq is generic enought that you can consider it as a result of "implement an algorithm to do x" instea of "call method that does x" in the language comparison in this thread. There's not a function for everything, but most of the time there's a way to do anything in 20% the amount of lines of procedural code in linq whenever it's about "generate, do operations or transform the shape of data".
There is nothing unique to LINQ there - it's just basic functional programming techniques.
Enumerable.Aggregate() is the reduce() function, hiding behind a confusing new name, and Enumerable.Select() is just a map/filter:
[source]reduce(lambda x,y: x+', '+y, map(str, xrange(1,1001)))[/source]