1. 程式人生 > 實用技巧 >datatable GRoup by Lambda 統計

datatable GRoup by Lambda 統計

//建立一個空表
            DataTable dt = new DataTable();
            dt.Columns.Add("日期", typeof(DateTime));
            dt.Columns.Add("類別", typeof(String));
            dt.Columns.Add("科室", typeof(String));
            dt.Columns.Add("數量", typeof(double));

            //3.通過行框架建立並賦值
            dt.Rows.Add("
2020-01-01", "門診","內科",10); dt.Rows.Add("2020-01-01", "門診", "外科", 20); dt.Rows.Add("2020-01-01", "門診", "骨科", 30); dt.Rows.Add("2020-01-01", "住院", "內科病區", 40); dt.Rows.Add("2020-01-01", "住院", "小兒病區", 50); dt.Rows.Add("2020-01-02", "門診", "內科", 60); dt.Rows.Add(
"2020-01-02", "門診", "外科", 70); dt.Rows.Add("2020-01-02", "住院", "小兒病區", 80); var data = dt.AsEnumerable(); var typeName = ""; decimal typeSum = 0; //一、單柱資料 不需要對比 //1.按日期彙總數量 var s = data.GroupBy(r => r["日期"]).Select(g=>new { Name=g.Key,Sum=g.Sum(r=>(double
)r["數量"])}); foreach (var sitem in s.ToList()) { //取出值進行使用 typeName =sitem.Name.ToString(); typeSum =Convert.ToDecimal(sitem.Sum.ToString()); } //2.按類別進行彙總 var s1 = data.GroupBy(r => r["類別"]).Select(g => new { Name = g.Key, Sum = g.Sum(r => (double)r["數量"]) }); foreach (var s1item in s1.ToList()) { //取出值進行使用 typeName = s1item.Name.ToString(); typeSum = Convert.ToDecimal(s1item.Sum.ToString()); } //3.按科室進行彙總 var s2 = data.GroupBy(r => r["科室"]).Select(g => new { Name = g.Key, Sum = g.Sum(r => (double)r["數量"]) }); foreach (var s2item in s2.ToList()) { //取出值進行使用 typeName = s2item.Name.ToString(); typeSum = Convert.ToDecimal(s2item.Sum.ToString()); } //二、具有對比性質的彙總 //1.相同時間點下 不同類別數量分別多少 var t = data.GroupBy(r=> new { 日期=r["日期"],類別= r["類別"] }).Select(g=>new {Name=g.Key.日期,tp = g.Key.類別,Sum=g.Sum(i=>(double)i["數量"]) }); //2.相同時間節點下 不同科室數量分別多少 var t1 = data.GroupBy(r => new { 日期 = r["日期"], 科室 = r["科室"] }).Select(g => new { Name = g.Key.日期, tp = g.Key.科室, Sum = g.Sum(i => (double)i["數量"]) });