LINQ 投影元素计数

5

假设:

var a = SomeCollection.OrderBy(...)
              .Select(f => new MyType
                               {
                                  counter = ? //I want counter value, so what first
                                              //object have counter=1, second counter=2 
                                              //and so on
                                  a=f.sometthing,
                                  ...
                                });

我该如何设置计数器的值?还是说我必须在之后迭代a
2个回答

9
使用重载的Select方法,该方法将返回当前元素的从0开始的索引。
.Select((item, index) => new MyType
            { 
                counter = index + 1,
                a = item.Something

1
这个重载在 http://msdn.microsoft.com/en-us/library/bb534869.aspx 上有文档记录。 - Reddog
1
@ren,如果使用EF,您需要从数据库中实例化集合,然后可以使用此方法。例如,theEFQuery.AsEnumerable().Select((item, index) =>。调用AsEnumerable()会在数据库中评估查询,随后运行的代码将在内存中运行。如果您想要获取数据库内部的实际行号,则仍然不适用此方法。 - Anthony Pegram

3

简单地捕获一个变量:

int index = 1;

var a = SomeCollection.OrderBy(...)
        .Select(x => new MyType { counter = index++; });

计数器会在每次迭代调用时递增。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接