0

リストをグループ化するためにLINQを使用する方法を探しています。

Class Item
    Public col1 As String
    Public col2 As String
    Public col3 As String
    Public description As String
    Public Sub New(ByVal col1 As String, ByVal col2 As String, 
                   ByVal col3 As String, ByVal description As String)
        Me.col1 = col1
        Me.col2 = col2
        Me.col3 = col3
        Me.description = description
    End Sub
End Class  


    Dim ItemList As New List(Of Item)
    ItemList.Add(New Item("A", "A", "A", "1"))
    ItemList.Add(New Item("A", "A", "A", "2"))
    ItemList.Add(New Item("A", "B", "A", "3"))
    ItemList.Add(New Item("A", "B", "A", "4"))
    ItemList.Add(New Item("A", "B", "B", "5"))
    ItemList.Add(New Item("A", "B", "C", "6"))

結果は次の 4 つの項目のリストになります。

    '[0] = "A", "A", "A", "1 2"
    '[1] = "A", "B", "A", "3 4"
    '[2] = "A", "B", "B", "5"
    '[3] = "A", "B", "C", "6"
4

2 に答える 2

1

3 つの列でグループ化し、それらの説明を結合するという要件が理解できれば、次の LINQ ステートメントが機能するはずです。

var query = from item in ItemList
            group item by
                new { Col1 = item.col1, Col2 = item.col2, Col3 = item.col3 }
            into g
            select new
            {
                 Col1 = g.Key.Col1,
                 Col2 = g.Key.Col2,
                 Col3 = g.Key.Col3,
                 Description = String.Join(" ", g.Select(xx => xx.description))
            };
于 2012-06-27T14:47:19.390 に答える
0
Class Item
    ...
    Public ReadOnly Property id As String
        Get
            Return col1 & "_" & col2 & "_" & col3
        End Get
    End Property
End Class  

Dim groups = ItemList.GroupBy(Function(item) item.id)
Dim result = From g in groups
             Select New Item(g(0).col1, g(0).col2, g(0).col3,
                             String.Join(" "c, g.Select(Function(i) i.description)))
于 2012-06-27T17:04:16.500 に答える