2011-10-12 5 views
2

Dans le code suivant pour trouver sum of Rate colum n dans le DataTable dtGroupe par en somme DataTable colonne

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

Dans ce qu'il est possible d'assigner group by clause like SQL Inn afin d'obtenir la somme basée sur une valeur dans une autre colonne du même dt Fo par exemple:

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

Je veux juste pour obtenir un Sum A=170Sum B=120.

Répondre

10

Essayez 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

Vous souhaiterez peut-être obtenir d'abord la liste des valeurs Groupe distinctes du DataTable. Puis boucle à travers la liste des groupes et appeler la fonction pour chaque groupe:

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

LINQ est une bonne idée. Si vous travaillez avec .net 2.0, vous pouvez l'implémenter comme suit:

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]);