0

我的datatable长相是这样的。。

  -Fix colms---            -----This Columns are dynamic created not fix ---
  |           |            |                                               |
Country    Partners     JAN-1990     FEB-1990     SEP-1990 . . . . . DEC-1995 
----------------------------------------------------------------------------
-> India      US           55.00        -             45.50               -
|  Spain      UK           43.54        12.23         -                   -
|  Japan      India        46.45        55.45         40.00               - 
|-> India      UK          45.50        54.65         21.20               85.36

我需要这样的输出..

Country    JAN-1990     FEB-1990     SEP-1990 . . . . . DEC-1995 
-----------------------------------------------------------------
India       100.50       54.65         66.70             85.36
Spain       43.54        12.23         -                 -
Japan       46.45        55.45         40.00             - 

我正在使用以下linq query来分组国家,但不知道如何获得分组国家的总和..

var result = from tab in dt.AsEnumerable()
             group tab by tab["Country"]
             into groupDt
             select new
             {
                Country = groupDt.Key
              };

是否可以使用 linq 对国家和动态生成的列进行分组和总和?

如果有任何其他可能的解决方案表示赞赏。

提前致谢

4

1 回答 1

1

这可以工作(假设您的动态列是 type decimal):

var dtResult = new DataTable();
dtResult.Columns.Add("Country", typeof(string));
foreach (var col in dt.Columns.Cast<DataColumn>().Skip(2))
{
    dtResult.Columns.Add(col);
}
var countryGroups = dt.AsEnumerable().GroupBy(r => r.Field<string>("Country"));
foreach (var countryGroup in countryGroups)
{
    DataRow row = dtResult.Rows.Add();
    row.SetField("Country", countryGroup.Key);
    foreach (var col in dtResult.Columns.Cast<DataColumn>().Skip(1))
    {
        row.SetField(col, countryGroup.Sum(g => g.Field<decimal>(col)));
    }
}
于 2013-04-15T10:18:20.420 回答