60

我想做这样的事情:

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

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

基本上,我只想在LINQPad中显示一个计数/索引列(这很棒,顺便说一句),这意味着我不能提前声明计数器。

4

3 回答 3

135

与其使用副作用,不如使用Select带索引的重载:

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

可以使用副作用来做到这一点,但不能以您尝试的方式:

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

我强烈建议不要这样做。

于 2010-02-05T17:20:48.573 回答
7

如果您真的希望它是一个计数器,而不仅仅是一个索引,那么只需将计数器声明移到 LINQ 表达式之外

var counter = 0;
from a in stuff
select new { count = counter++; a.Name };
于 2010-02-05T17:22:41.187 回答
1

NumberRow只需在此处添加两个变量即可

.Select((x,NumberRow) => new ViewModelArchiveOrder
                    {
                        NumberRow= NumberRow + 1,
                    })
于 2019-05-06T11:23:34.713 回答