2010-02-05 59 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

相關問題