2016-02-02 48 views
0

我想通過列將數據表groupby和總計數字字段,但我無法完成總和。這是我的代碼,由數據表groupby。如何按列和總和數組列Datatable

DataTable dt_grouped_by = dt_data.AsEnumerable() 
          .GroupBy(r => new { LOCNR = r["LOCNR"], DEPTNR = r["DEPTNR"] }) 
          .Select(g => g.OrderBy(r => r["CODE"]).First()) 
          .CopyToDataTable(); 

我有名爲quantity_received和damage_received的列。我需要總結這兩列。我如何在上面的代碼中對它們進行求和?

+0

DB端的那些列的類型是什麼? –

+0

您需要將列轉換爲小數或任何數字類型它是 –

+0

它們是十進制列 –

回答

0

您有一個分組,實現IEnumerable<DataRow>。內,以便分組,你可以使用所有的LINQ擴展方法,像Sum()

DataTable dt_grouped_by = dt_data.AsEnumerable() 
          .GroupBy(r => new 
             { 
              LOCNR = r.Field<int>("LOCNR"), 
              DEPTNR = r.Field<int>("DEPTNR") 
             }) 
          .Select(g => new 
          { 
           Code = r.First().Field<string>("CODE"), 
           SumQr = r.Sum(x => x.Field<int>("quantity_received")) 
           SumDr = r.Sum(x => x.Field<int>("damage_received")) 
          }) 
          .OrderBy(x => x.Code) 
          .CopyToDataTable(); 

正如你看到的,我更喜歡Field()擴展方法行索引row["x"],因爲它是強類型。當然,我必須猜測實際的數據類型。我還刪除了First(),因爲您無法將一個DataRow轉換爲DataTable