2009-02-25 60 views
6

這感覺就像一個完全基本的問題,但是,對於我的生活,我似乎無法找到一個優雅的解決方案。LINQ到對象自動增量編號

基本上,我正在做一個LINQ查詢從查詢​​創建一個新的對象。在新對象中,我想生成一個自動遞增的數字以允許我保留一個選擇順序供以後使用(在我的示例中命名爲Iter)。

這是我目前的解決方案,做什麼,我需要:

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 

有沒有辦法做到這一點的LINQ查詢(框架內,這樣我就不必循環後的集合查詢)?

回答

29

原諒我在VB.NET在C#這樣做不知道確切的語法:

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

我不知道這是否可能在VB,但在C#一個使用了閉:

+0

見其他答案:這/是/可能... – Richard 2009-02-25 17:40:30

+0

這是我的第一個傾向(Gerneraly,我交流#花花公子)。但是,我不知道任何vb.net版本的++。我很想嘗試使用委託方法來處理這個問題,但是在這樣一個簡單的任務中增加了比我更喜歡的複雜性。 – Nathan 2009-02-25 17:52:06

0

我跑到這篇文章,同時試圖解決類似的問題,與列表(字符串)。

我發佈了我的解決方法,希望可以通過它來解決您的問題,但更多的是其他人遇到此問題時使用List(Of 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)}) 

希望這會有所幫助!

1

以上解決方案可在VB.NET來概括這樣的:

MasterCalendarInstance _ 
    .OrderBy(Function (x) x.Key) _ 
    .Select(Function (x, ixc) New With { .CalendarId = x.Key, 
             .Iter = ixc })