edit: I'm not just blowing hot air, I've actually wrote C# code that went into production.
I agree that it can be difficult to debug - that's why it should be kept simple. Personally, I love that LINQ enables me to think of my data in terms of sets and operations on them, rather how to execute the operations on the data.
But when I use LINQ's GroupBy, SelectMany etc. I know they've been tested millions of times before.
The same cannot be said about somebody's "hand-made" algorithm, accomplishing the same result with foreach loops, breaks etc. like you would in good ol' Java.
So it's not just a matter of being imperative, long-winded or ugly.
You can also break LINQ expressions down into a series of simplier ones: deferred evaluation is a bliss here!
Or - thanks to the way it works, extension methods, anonymous methods etc. - simplify it by creating your own LINQ-like functionality, such as - say - Batch (not part of the standard Linq library)
To that end Jon Skeet has already documented how to do it in his Edulinq series[0][1].
[0] Link to series: http://msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/defau...
[1] Download of series (found in link): https://code.google.com/p/edulinq/downloads/list
There are a couple smaller LINQ implementations out there like Linq to Amazon that you can take a look at (Linq2<insert whatever here> libraries seemed to be coming out of nowhere for a while).
http://channel9.msdn.com/shows/Going+Deep/Bart-De-Smet-Obser...
0: http://www.amazon.com/dp/1590597893/
Although this blog is dead now, the information stored within is golden. I also highly suggest De Smet's C# 5.0 unleashed book.
LINQ alone makes C# infinitely less verbose and 'boilerplate' than Java.
My biggest interest in .Net/CLI/Mono from very early on was how much easier it was to interface with systems libraries vs. Java's JNI.
If you have a more recent Perl available, use it and it's newer features (use 5.014; at least, hopefully). It's a small thing, but being able to call keys/values/shift/unshift/push/pop on the reference versions of their subject is very nice. There's useful new features in every new version now.
Additionally, Function::Parameters (or some other module that does similar, take your pick) will make your life much, much simpler if you tend to write a lot of subs.
Use Moose (or at least Moo or Mouse, if you want it lighter weight) if you are using objects.
Enjoy!
I'm pretty sure the builders of C# didn't think about Groovy at all when putting in features such as closures and dynamics. Correlation doesn't imply causation.
P.S. The other reason you use C#: you want to interact w/ SQL Server. TDS works, but boy is it a pain compared to just adding a reference in Visual studio. Also the bindings for TDS are pretty weak in some languages.
http://rxwiki.wikidot.com/101samples - A cursory look; it goes far deeper than this.
Like F# classified as one of "unreasonable langauges" on the basis that "we have enough company-sponsored languages already"