2011-10-12 44 views
2

在下面的代碼在DataTable dt集團通過在數據表中列總和

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

在這一發現sum of Rate colum n是有可能基於相同的另一列中的值賦給group by clause like SQL酒店爲了得到總和dt 佛如:

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

我只想得到Sum A=170Sum B=120

回答

10

嘗試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

您可能希望首先從DataTable中獲取不同組值的列表。使用LINQ是一個好主意

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

:然後遍歷組列表,並調用該函數爲每個組。如果您使用.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]);