C# 按组求和的Linq查询

C# 按组求和的Linq查询,c#,linq,linq-to-dataset,C#,Linq,Linq To Dataset,我有这样一个数据表: Category Description CurrentHours CTDHours LC1 Cat One 5 0 LC2 Cat Two 6 0 LC3 Cat Three 18

我有这样一个数据表:

Category         Description       CurrentHours      CTDHours  
LC1              Cat One                 5               0  
LC2              Cat Two                 6               0  
LC3              Cat Three              18               0  
LC1              Cat One                 0               9  
LC2              Cat Two                 0              15  
LC4              Cat Four                0              21  
我需要分组并总结如下:

Category         Description       CurrentHours      CTDHours  
LC1              Cat One                 5              14  
LC2              Cat Two                 6              21  
LC3              Cat Three              18               0  
LC4              Cat Four                0              21  
换句话说,我需要按类别和描述列对两个小时的列进行汇总

我知道我可以构建一个新表,循环现有数据并将数据相加到新表中,但我认为使用Linq会有一种更简单的方法。我在谷歌上搜索了几个小时,但我找到的所有例子似乎都不符合我的意图


顺便说一句,创建数据表的odbc驱动程序不具备子查询等功能,否则我只能使用SQL来完成。

使用匿名对象按类别和描述进行分组。以下是Linq到数据集查询,返回分组小时数:

from r in table.AsEnumerable()
group r by new { 
     Category = r.Field<string>("Category"),
     Description = r.Field<string>("Description")
} into g
select new {
   Category = g.Key.Category,
   Description = g.Key.Description,
   CurrentHours = g.Sum(x => x.Field<int>("CurrentHours"),
   CTDHours = g.Sum(x => x.Field<int>("CurrentHours") + x.Field<int>("CTDHours"))
} 

您需要将当前小时数和CTD小时数相加,所以-

select new {
   ...
   CTDHours = g.Sum(x => x.Field<int>("CTDHours") + g.Sum(x => x.Field<int>("CurrentHours")
}
选择新建{
...
CTDHours=g.Sum(x=>x.Field(“CTDHours”)+g.Sum(x=>x.Field(“当前小时”)
}

成功了。非常感谢。顺便说一句,你是如何让我的列排列得如此完美的?我试图找出答案,但失败了。@John我选择了表格并将其格式化为代码(保留空格):@SergeyBerezovskiy感谢你提供了这两个版本,**真是太棒了**:)
select new {
   ...
   CTDHours = g.Sum(x => x.Field<int>("CTDHours") + g.Sum(x => x.Field<int>("CurrentHours")
}