Самое простое решение - использовать linq. Если вы хотите избежать использования linq, вы можете, но вам нужно написать гораздо больше строк кода. В любом случае, вот пример, который показывает, как использовать linq для группировки строк на основе первых двух столбцов, а затем для вычисления суммы 3-го столбца.
Допустим, таблица входных данных содержит столбцы C1 (Inetegr), C2 (String), C3 (Integer), которые вы загружаете из CSV-файла:
C1 | C2 | C3
-------------------
1 |One | 100
1 |One | 200
2 |Two | 300
2 |Two | 400
3 |Three | 500
Просто для целей тестирования, скажем, это таблица данных:
Dim dt = New DataTable()
dt.Columns.Add("C1", GetType(Integer))
dt.Columns.Add("C2", GetType(String))
dt.Columns.Add("C3", GetType(Integer))
dt.Rows.Add(1, "One", 100)
dt.Rows.Add(1, "One", 200)
dt.Rows.Add(2, "Two", 300)
dt.Rows.Add(2, "Two", 400)
dt.Rows.Add(3, "Three", 500)
Чтобы получить ожидаемый результат, вы можете использовать следующий код:
Dim q = From r In dt.AsEnumerable()
Select C1 = r.Field(Of Integer)("C1"),
C2 = r.Field(Of String)("C2"),
C3 = r.Field(Of Integer)("C3")
Group By C1, C2 Into Group
Select C1, C2, C3 = Group.Sum(Function(x) x.C3)
Dim result = dt.Clone()
For Each item In q
result.Rows.Add(item.C1, item.C2, item.C3)
Next
И результат будет:
C1 | C2 | C3
-------------------
1 |One | 300
2 |Two | 700
3 |Three | 500