2009-02-25 35 views
6

Điều này giống như một câu hỏi hoàn toàn cơ bản, nhưng, đối với cuộc sống của tôi, tôi dường như không thể tìm ra giải pháp thanh lịch.LINQ to Objects auto increment number

Về cơ bản, tôi đang thực hiện truy vấn LINQ tạo đối tượng mới từ truy vấn. Trong đối tượng mới, tôi muốn tạo một số tự động tăng để cho phép tôi giữ một thứ tự lựa chọn để sử dụng sau này (có tên là Iter trong ví dụ của tôi).

Đây là giải pháp hiện tại của tôi mà những gì tôi cần:

Dim query2 = From x As DictionaryEntry In MasterCalendarInstance _ 
       Order By x.Key _ 
       Select New With {.CalendarId = x.Key, .Iter = 0} 

    For i = 0 To query2.Count - 1 
     query2(i).Iter = i 
    Next 

Có cách nào để làm điều này trong bối cảnh của các truy vấn LINQ (vì vậy mà tôi không cần phải lặp bộ sưu tập sau truy vấn)?

Trả lời

29

Pardon tôi để làm điều này trong C# không chắc chắn chính xác cú pháp trong VB.NET:

MasterCalendarInstance 
    .OrderBy(x => x.Key) 
    .Select((x, ixc) => new { CalendarId = x.Key, Iter = ixc }); 
+0

Tôi không thấy cách giải quyết vấn đề của mình. làm thế nào để giá trị ixc nhận được dân cư và tự động tăng lên? – Nathan

+3

automagically :) nó là một quá tải cho phương pháp mở rộng .Select trong đó có một Func (xem http://msdn.microsoft.com/en-us/library/bb534869.aspx) – veggerby

+0

Cảm ơn điều này giải quyết vấn đề của tôi. Tôi đánh giá cao sự giúp đỡ! – Nathan

7

Tôi không biết nếu điều này là có thể trong VB, nhưng trong C# có ai sử dụng một đóng cửa:

+0

Xem câu trả lời khác: đây/là/thể ... – Richard

+0

Đây là khuynh hướng đầu tiên của tôi (Gerneraly, tôi aC# chàng). Tuy nhiên, tôi không biết về bất kỳ phiên bản vb.net nào của ++. Tôi đã bị cám dỗ để dính vào một phương pháp đại biểu để xử lý điều này, nhưng điều đó làm tăng thêm sự phức tạp hơn tôi thích trong một nhiệm vụ đơn giản như vậy. – Nathan

+1

+1 Tính năng này hoạt động nếu bạn muốn giữ mã trong cú pháp truy vấn thay vì cú pháp Lambda. – Douglas

0

Tôi đã chạy vào bài đăng này trong khi cố gắng giải quyết vấn đề tương tự với Danh sách (của chuỗi).

Tôi đang đăng cách giải quyết của mình với hy vọng rằng nó có thể được áp dụng để giải quyết vấn đề của bạn, nhưng nhiều hơn cho bất kỳ ai khác gặp vấn đề này với Danh sách (T).

Dim list As New List(Of String) 
list.Add("Test1") 
list.Add("Test2") 
list.Add("Test3") 

Dim var = list.Select(Function(s) New With {.Name = s, .RecordID = list.IndexOf(s)}) 

Hy vọng điều này sẽ hữu ích!

1

Các giải pháp trên có thể được tóm tắt trong VB.NET như thế này:

MasterCalendarInstance _ 
    .OrderBy(Function (x) x.Key) _ 
    .Select(Function (x, ixc) New With { .CalendarId = x.Key, 
             .Iter = ixc }) 
Các vấn đề liên quan