Jay*_*aty 5 c# linq datatable group-by sum
我能够从DataTable行中找到重复项.如下:
var groups = table.AsEnumerable()
.GroupBy(r => new
{
c1 = r.Field<String>("Version"),
});
var tblDuplicates = groups
.Where(grp => grp.Count() > 1)
.SelectMany(grp => grp)
.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)
现在,我想将所有重复记录合并为单个,并将其与值列值相加.
非常像以下内容:
具有重复项的DataTable:
Version Value
1 2
2 2
2 1
1 3
2 1
3 2
Run Code Online (Sandbox Code Playgroud)
没有重复的DataTable和值总和:
Version Value
1 5
2 4
3 2
Run Code Online (Sandbox Code Playgroud)
我知道这个链接是在反射的帮助下完成的. http://forums.asp.net/t/1570562.aspx/1
还有其他办法吗?
编辑:但是,如果我有两列以上,比如五列,我仍然想在Value列上进行求和,并且还需要resulatant summed datatable中的其他列数据.怎么做?在这里,我在结果DataTable中获得了Version和Value.我也希望其他列具有值.如下:
版本col1 col2值
1 A A 2
2 B B 2
2 B B 1
1 A A 3
2 B B 1
3 C C 2
Run Code Online (Sandbox Code Playgroud)
var result = table.AsEnumerable()
.GroupBy(r => r.Field<string>("Version"))
.Select(g =>
{
var row = table.NewRow();
row.ItemArray = new object[]
{
g.Key,
g.Sum(r => r.Field<int>("Value"))
};
return row;
}).CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您想保留其他字段,请尝试以下操作:
var result = table.AsEnumerable()
.GroupBy(r => new
{
Version = r.Field<String>("Version"),
Col1 = r.Field<String>("Col1"),
Col2 = r.Field<String>("Col2")
})
.Select(g =>
{
var row = g.First();
row.SetField("Value", g.Sum(r => r.Field<int>("Value")));
return row;
}).CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)