tags:

views:

97

answers:

2

I want to do something like this:

from a in stuff
let counter = 0
select new { count = counter++, a.Name };

But I get a error telling me that counter is read only. Is there a way to do something similar to this, without declaring a variable outside of the query?

Basically, I just want to show a count/index column in LINQPad (which is awesome, BTW), which means I can't declare counter ahead of time.

+6  A: 

Rather than using side-effects, use the overload of Select which takes an index:

stuff.Select((value, index) => new { index, value.Name });

You could do it using side-effects, but not in the way you tried:

int counter = 0;
var query = from a in stuff
            select new { count = counter++, a.Name };

I would strongly advise against this though.

Jon Skeet
Unfortunately, that overload of Select isn't supported by LINQPad. Great suggestion, though. Is there a way to do it via side effects without declaring a variable outside of the query?
Mike Pateras
That overload is supported in LINQPad - what error are you getting?
Joe Albahari
A: 

If you truly want it to be a counter, and not just an index, then just move the counter declaration outside the LINQ expression

var counter = 0;
from a in stuff
select new { count = counter++; a.Name };
JaredPar