Raggruppa per in DataTable Somma di colonna

Nel seguente codice per trovare la sum of Rate colum n nel DataTable dt

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

In questo è ansible assegnare una group by clause like SQL Inn per ottenere Sum basato su un valore in un’altra colonna dello stesso dt Fo eg:

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

Voglio solo ottenere Sum A=170 un Sum B=120 .

Prova 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())) }; 

usare LINQ è una buona idea. se stai lavorando con .net 2.0, puoi implementarlo come segue:

  Dictionary dicSum = new Dictionary(); 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]); 

Potrebbe essere necessario prima ottenere l’elenco di valori di gruppo distinti dal DataTable. Quindi scorrere l’elenco dei gruppi e chiamare la funzione per ciascun gruppo:

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