2010-02-05 61 views
36

我想要做这样的事情:我可以在LINQ中使用递增计数变量吗?

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

但我得到一个错误,告诉我,计数器是只读的。有没有办法做到类似这样的事情,而不需要在查询之外声明一个变量?

基本上,我只想显示LINQPad(这真棒,顺便说一句)的计数/索引列,这意味着我不能提前申报柜台。

回答

83

而不是使用的副作用,使用Select超载这需要一个索引:

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

可能做到使用它的副作用,但不是在你尝试过的方式:

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

我强烈建议不要这样做。

6

如果你真的希望它是一个计数器,并不仅仅是一个索引,然后只需移动柜台申报LINQ表达

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

另一个答案强烈建议对这个之外。 http://stackoverflow.com/a/2209014/7724 – bzlm 2016-07-07 20:57:14

相关问题