繁体   English   中英

Linq查询按组求和

[英]Linq query to sum by group

我有一个像这样的数据表:

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可以更轻松地完成此操作。 我已经在Google上搜索了几个小时,但是我发现的所有示例似乎都不符合我的尝试。

顺便说一句,用于创建数据表的odbc驱动程序不具有子查询等功能,否则我将仅使用SQL进行此操作。

使用匿名对象按类别和描述进行分组。 这是Linq to DataSet查询,它返回分组时间:

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"))
} 

如果要查询数据库(问题尚不清楚):

from r in context.Table
group r by new { 
     r.Category,
     r.Description
} into g
select new {
   g.Key.Category,
   g.Key.Description,
   CurrentHours = g.Sum(x => x.CurrentHours),
   CTDHours = g.Sum(x => x.CTDHours + x.CurrentHours)
}

您需要将CurrentHoursCTDhours ,所以-

select new {
   ...
   CTDHours = g.Sum(x => x.Field<int>("CTDHours") + g.Sum(x => x.Field<int>("CurrentHours")
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM