Группировать по сумме столбца DataTable - PullRequest
2 голосов
/ 12 октября 2011

В следующем коде для поиска sum of Rate colum n в DataTable dt

dt.Compute("Sum(Convert(Rate, 'System.Int32'))");

В этом можно назначить group by clause like SQL Порядок Inn, чтобы получить сумму на основе значения в другом столбце того же dt Например:

----------------------------
Rate | Group
----------------------------
100  | A
120  | B
70   | A
----------------------------

Я просто хочу получить Sum A=170 и Sum B=120.

Ответы [ 3 ]

12 голосов
/ 12 октября 2011

Попробуйте LINQ,

var result = from tab in dt.AsEnumerable()
              group tab by tab["Group"]
                into groupDt
                 select new 
                  { 
                    Group = groupDt.Key,  
                    Sum=groupDt.Sum((r)=> decimal.Parse(r["Rate"].ToString()))
                  };
4 голосов
/ 12 октября 2011

использование LINQ - хорошая идея. если вы работаете с .net 2.0, вы можете реализовать это следующим образом:

    Dictionary<string, int> dicSum = new Dictionary<string, int>();
    foreach (DataRow row in dt.Rows)
    {
        string group=row["Group"].ToString();
        int rate=Convert.ToInt32(row["Rate"]);
        if (dicSum.ContainsKey(group))
            dicSum[group] += rate;
        else
            dicSum.Add(group, rate);
    }
    foreach (string g in dicSum.Keys)
        Console.WriteLine("SUM({0})={1}", g, dicSum[g]);
2 голосов
/ 12 октября 2011

Возможно, вы захотите сначала получить список различных значений группы из таблицы данных. Затем выполните цикл по списку групп и вызовите функцию для каждой группы:

dt.Compute("Sum(Convert(Rate, 'System.Int32'))", "Group = '" + Group + "'");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...