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 回答