问题
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.
回答1:
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.
回答2:
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 };
回答3:
Just add two variable here NumberRow
is for that
.Select((x,NumberRow) => new ViewModelArchiveOrder
{
NumberRow= NumberRow + 1,
})
来源:https://stackoverflow.com/questions/2209000/can-i-have-an-incrementing-count-variable-in-linq