我有一个这样的数据表:
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可以更容易地实现它。我用谷歌搜索了几个小时,但我找到的所有例子似乎都不适合我想做的事。
BTW,创建数据表的odbc驱动程序没有子查询等功能,或者我只是使用SQL完成它。答案 0 :(得分:32)
使用匿名对象按类别和说明进行分组。这是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)
}
答案 1 :(得分:0)
您需要将CurrentHours
和CTDhours
相加,所以 -
select new {
...
CTDHours = g.Sum(x => x.Field<int>("CTDHours") + g.Sum(x => x.Field<int>("CurrentHours")
}