【发布时间】:2010-02-05 17:19:01
【问题描述】:
我想做这样的事情:
from a in stuff
let counter = 0
select new { count = counter++, a.Name };
但我收到一条错误消息,告诉我计数器是只读的。有没有办法做类似的事情,而不在查询之外声明一个变量?
基本上,我只想在LINQPad 中显示一个计数/索引列(这太棒了,顺便说一句),这意味着我不能提前声明计数器。
【问题讨论】:
我想做这样的事情:
from a in stuff
let counter = 0
select new { count = counter++, a.Name };
但我收到一条错误消息,告诉我计数器是只读的。有没有办法做类似的事情,而不在查询之外声明一个变量?
基本上,我只想在LINQPad 中显示一个计数/索引列(这太棒了,顺便说一句),这意味着我不能提前声明计数器。
【问题讨论】:
不要使用副作用,而是使用带有索引的Select 的重载:
stuff.Select((value, index) => new { index, value.Name });
您可以使用副作用来做到这一点,但不是以您尝试的方式:
int counter = 0;
var query = from a in stuff
select new { count = counter++, a.Name };
我强烈建议不要这样做。
【讨论】:
query 时都会计算 if。这种事情在现实世界中可能真的很令人困惑(而不是琐碎的例子)
如果你真的希望它是一个计数器,而不仅仅是一个索引,那么只需将计数器声明移到 LINQ 表达式之外
var counter = 0;
from a in stuff
select new { count = counter++; a.Name };
【讨论】:
只需在此处添加两个变量 NumberRow 即可
.Select((x,NumberRow) => new ViewModelArchiveOrder
{
NumberRow= NumberRow + 1,
})
【讨论】: