正確な用語はわかりませんでしたが、LINQ を使用してやろうとしたことは、辞書のキーをその子のキーで「切り替える」ことでした。
これは、入力として取得したコレクションです。
Key:HeaderID Value:
Key:ItemID Value:Object
Key:ItemID Value:Object
Key:ItemID Value:Object
Key:HeaderID Value:
Key:ItemID Value:Object
Key:ItemID Value:Object
Key:ItemID Value:Object
Key:HeaderID Value:
Key:ItemID Value:Object
Key:ItemID Value:Object
Key:ItemID Value:Object
そして、これは私が出力として欲しいコレクションです:
Key:ItemID Value:
Key:HeaderID Value:Object
Key:HeaderID Value:Object
Key:HeaderID Value:Object
Key:ItemID
Key:HeaderID Value:Object
Key:HeaderID Value:Object
Key:HeaderID Value:Object
Key:ItemID
Key:HeaderID Value:Object
Key:HeaderID Value:Object
Key:HeaderID Value:Object
私はすでにVB.netでコードを作成しています:
Dim objInput As Dictionary(Of String, Dictionary(Of String, Object)) = fakefunction()
' ItemID -> HeaderID ColumnValue
Dim objOutput As New Dictionary(Of String, Dictionary(Of String, Object))
For Each strHeaderID As String In objInput.Keys
Dim objColumnValuesPerItem As Dictionary(Of String, Object) = objInput(strHeaderID)
For Each strItemID As String In objColumnValuesPerItem.Keys
Dim objColumnValue As Object = objColumnValuesPerItem(strItemID)
If Not objOutput.ContainsKey(strItemID) Then
objOutput.Add(strItemID, New Dictionary(Of String, Object))
End If
objOutput(strItemID).Add(strHeaderID, objColumnValue)
Next
Next
この質問をする理由は純粋に教育的なものです。LINQ を使用してこれを正しいリストに変換しようとしましたが、非常に複雑で長い LINQ ステートメントを作成しない限り、どこにも到達できませんでした。