2012-06-27 3 views
0

Я просто смотрю, как использовать LINQ для группировки списка.linq concat column по 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

рабочий, (нужно только добавить toArray в string.join). – 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))) 
Смежные вопросы