#c# #winforms #datatable
#c# #winforms #datatable
Вопрос:
В следующем коде для нахождения 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
.
Ответ №1:
Попробуйте 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()))
};
Ответ №2:
использование 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]);
Ответ №3:
Возможно, вам сначала захочется получить список различных значений группы из таблицы данных. Затем выполните цикл по списку групп и вызовите функцию для каждой группы:
dt.Compute("Sum(Convert(Rate, 'System.Int32'))", "Group = '" Group "'");