Сумма X значений из базы данных - PullRequest
0 голосов
/ 30 ноября 2011

В моей базе данных SQLServer у меня есть ассоциативная таблица ID с KID и amount.Я хочу суммировать значения от каждого идентификатора.Это означает, что я хочу получить сумму из KID 6, KID 10 и т. Д.

Моя проблема в том, что я не знаю, как это сделать, поскольку для одного KID может быть много значений, иможет быть около 100 KID.

Я хочу сделать все это на C #.Какой самый лучший способ?И как лучше сохранить?Массив, список?

РЕДАКТИРОВАТЬ:

Мне нужно сделать это в C # с SqlCommand, потому что мне нужны значения в моем приложении!

РЕДАКТИРОВАТЬ 2:

LINQ to SQL невозможен, потому что у меня нет объектов Entity.Я хочу сделать это с SQLReader или что-то в этом роде.Это возможно?

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Я хочу сделать все это на 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 на ваш выбор.

Типизированные наборы данных также являются правильным выбором, хотя многим они не нравятся.

0 голосов
/ 30 ноября 2011

sql способ сделать это:

Select ID, sum(amount) from table group by ID
0 голосов
/ 30 ноября 2011
SELECT KID, SUM(amount) as 'Total'
FROM Table
GROUP BY KID

Не делайте этого в C #, это запрос на три строки в SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...