我只是想看看如何使用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"
答案 0 :(得分: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))
};
答案 1 :(得分: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)))