Stackoverflowers,
У меня есть результат из запроса SQL в виде:
Category Column2 Column3
A 2 3.50
A 3 2
B 3 2
B 1 5
...
Мне нужно сгруппировать набор результатов на основе столбца Category и суммировать значения для Column2 и Column3. Я должен сделать это в коде, потому что я не могу выполнить группирование в запросе SQL, который получает данные из-за сложности запроса (длинная история). Эти сгруппированные данные будут затем отображены в таблице.
У меня это работает для определенного набора значений в столбце Категория, но я бы хотел решение, которое обрабатывает любые возможные значения, которые появляются в столбце Категория.
Я знаю, что должен быть прямой, эффективный способ сделать это, но я не могу сейчас обернуть голову вокруг этого. Как бы вы этого достигли?
РЕДАКТИРОВАТЬ
Я попытался сгруппировать результат в SQL, используя точно такой же запрос на группировку, предложенный Томасом Левеском, и оба раза вся наша СУБД разбилась, пытаясь обработать запрос.
У меня сложилось впечатление, что Linq был недоступен до .NET 3.5. Это веб-приложение .NET 2.0, поэтому я не думал, что это вариант. Я ошибаюсь, думая об этом?
EDIT
Начинать вознаграждение, потому что я считаю, что это будет хорошей техникой для использования в наборе инструментов, независимо от того, откуда поступают разные наборы результатов. Я полагаю, что знание наиболее краткого способа группировки любых двух несколько похожих наборов данных в коде (без .NET LINQ) было бы полезно для большего числа людей, чем только для меня.
EDIT
Вот решение, которое я придумал в VB.NET на случай, если кому-то понадобится. Он использует ответ Пола Уильямса в качестве отправной точки. Я беру значения непосредственно из устройства чтения данных.
Public Class Accumulator
Public sum1 As Integer
Public sum2 As Decimal
End Class
If IReader.HasRows Then
Dim grouping As New Dictionary(Of String, Accumulator)
Do While IReader.Read
Dim sum As New Accumulator
If grouping.ContainsKey(IReader.GetString(0)) Then
sum = grouping.Item(IReader.GetString(0))
Else
sum = New Accumulator
grouping.Item(IReader.GetString(0)) = sum
End If
sum.sum1+= IReader.GetInt32(1)
sum.sum2 += IReader.GetInt32(2)
Loop
For Each key As KeyValuePair(Of String, Accumulator) In grouping
"DO WHAT YOU NEED TO DO WITH THE VALUES HERE"
Next
End If