linq concat column by val



我只是在看如何使用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"

如果我理解您按 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))
            };
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)))

最新更新