7

これは完全に基本的な質問のように感じますが、私の一生の間、私はエレガントな解決策を考え出すことができないようです。

基本的に、私は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クエリのコンテキスト内でこれを行う方法はありますか(クエリの後にコレクションをループする必要がないようにするため)?

4

4 に答える 4

33

C#でこれを行うことをお許しください。VB.NETの構文が正確にわかりません。

MasterCalendarInstance
    .OrderBy(x => x.Key)
    .Select((x, ixc) => new { CalendarId = x.Key, Iter = ixc });
于 2009-02-25T17:41:03.833 に答える
9

これがVBで可能かどうかはわかりませんが、C#ではクロージャを使用します。

int count = 0
var res = from x in MasterCalendarInstance
          order by x.Key
          select new {
            CalendarId = x.Key,
            Iter = count++
          };
于 2009-02-25T17:40:02.230 に答える
0

List(of String)で同様の問題を解決しようとしているときに、この投稿に遭遇しました。

私はあなたの問題を解決するためにそれが採用されることを期待して私の回避策を投稿していますが、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)})

お役に立てれば!

于 2010-03-11T18:45:56.977 に答える