2011-10-14 74 views
8

Có cách nào tốt để cung cấp cột chỉ mục kiểu "tự động tăng" (từ 1..x) khi chiếu các mục bằng LINQ không?Tự động tăng danh sách chung bằng LINQ trong C#

Ví dụ cơ bản, tôi đang tìm cột chỉ mục bên dưới để chuyển từ 1 đến số mục trong danh sách.

var items = from s1 in list 
    select new BrowsingSessionItemModel { Id = s1.Id, Index = 0 }; 

Lặp lại danh sách sẽ là lựa chọn dễ dàng nhưng tôi tự hỏi liệu có cách nào tốt hơn để làm điều này không?

+0

Nói chung, bạn có thể tạo số gia tăng mới bằng cách sử dụng Enumerable.Range (1, numOfItems), nhưng trong trường hợp của bạn, sử dụng Chọn quá tải là tùy chọn tốt hơn cho nhu cầu của bạn. –

Trả lời

13

Bạn không thể làm điều này với các biểu thức LINQ. Bạn có thể sử dụng theo phương pháp .Select phần mở rộng mặc dù:

var items = list.Select((x, index) => new BrowsingSessionItemModel { 
    Id = x.Id, 
    Index = index 
}); 
+0

Cảm ơn câu trả lời. – Nick

+0

Cách nào hiệu quả nhất để bắt đầu từ 1, thay vì 0? – Nick

+2

'Chỉ mục = chỉ mục + 1'. –

7

Bạn có thể sử dụng overload of Select mà lấy cung cấp các chỉ số để chiếu cũng như:

var items = list.Select((value, index) => new BrowsingSessionItemModel { 
               Id = value.Id, 
               Index = index 
              }); 

Lưu ý rằng không có hỗ trợ biểu thức truy vấn cho sự quá tải này. Nếu bạn đang thực sự tìm nạp các giá trị từ một cơ sở dữ liệu (không rõ liệu list thực sự là một List<T>), bạn có thể chắc chắn rằng bạn có một thứ tự thích hợp, vì nếu không kết quả là phần nào tùy ý.

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