2011-08-25 90 views
5

假设:LINQ投影元素计数

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

回答

8

使用Select的过载,它为您提供当前元素的基于0的索引。

.Select((item, index) => new MyType 
      { 
       counter = index + 1, 
       a = item.Something 
+1

此重载记录在http://msdn.microsoft.com/en-us/library/bb534869.aspx – Reddog

+0

@Reddog,谢谢,我已经添加了答案的链接。 –

+0

这不适用于实体的linq,尽管 – ren

3

只需捕获变量:

int index = 1; 

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

计数器计数为每个迭代被调用。

+0

这不适用于实体的linq – ren