2011-08-25 33 views
5

Giả sử:LINQ đếm

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, 
            ... 
           }); 

Làm thế nào để thiết lập giá trị truy cập này? Hoặc tôi có thích lặp lại a sau đó không?

Trả lời

8

Sử dụng quá tải Select cung cấp cho bạn chỉ mục dựa trên 0 của phần tử hiện tại.

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

Tình trạng quá tải này được ghi nhận tại http://msdn.microsoft.com/en-us/library/bb534869.aspx – Reddog

+0

@Reddog, cảm ơn, tôi đã thêm liên kết vào câu trả lời. –

+0

điều này không hoạt động trong LINQ đối với các thực thể, mặc dù – ren

3

Đơn giản chỉ cần chụp một biến:

int index = 1; 

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

Bộ đếm sẽ tăng như mỗi lần lặp được gọi.

+0

điều này không hoạt động với LINQ đối với các thực thể – ren

Các vấn đề liên quan