Я хочу сделать все это на C #. Какой самый лучший способ?
Лучший способ - использовать в выражении SQL вот так
SELECT
Kid,
SUM(AMOUNT) Sum_of_amount
FROM
table
GROUP BY
Kid
Использование SQL Reader для использования этого SQL довольно просто. Вот пример, где я проецирую значения из читателя в список, который составлен из анонимного типа. Если вы не хотите, чтобы он был анонимным, вы можете определить свой собственный тип и использовать его вместо этого. Вы также можете использовать цикл for
вместо выражения linq.
using (SqlConnection cn = new SqlConnection ("ConnectionString"))
using (SqlCommand cmd = new SqlCommand (@"
SELECT
Kid,
SUM(AMOUNT) Sum_of_amount
FROM
table
GROUP BY
Kid", cn))
{
cn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
var list = (from r in dr.Cast<DbDataRecord>()
select new {Id= r.GetInt32(0), SumOfAmount = r.GetInt32(1) }).ToList();
}
}
Если вы используете что-то вроде Linq для SQL, довольно просто сделать это следующим образом
Table<Kids> kids = db.GetKids();
var kidsSum =
(from k in kids
group p by p.Id into g
select new {ID = g.Key, SumOfAmount = g.Sum(p => p.Amount) }).ToList();
А как лучше сохранить? Массив, Список?
Не существует "лучшего" способа, но есть проблемы с напрямую управляемыми массивами. Вам лучше с Generic Collection на ваш выбор.
Типизированные наборы данных также являются правильным выбором, хотя многим они не нравятся.