2012-06-27 64 views
0

我只是在尋找如何使用LINQ來分組列表。linq concat column by val

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" 

回答

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)) 
      }; 
+0

工作,(只需要在string.join中添加一個toArray)。 – forX

+0

現在它如何轉換爲vb.net – forX

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)))