我能够从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();
现在,我想将所有重复记录合并为单个,并将其与值列值相加。
非常像以下内容:
具有重复项的DataTable:
Version Value
1 2
2 2
2 1
1 3
2 1
3 2
没有重复的DataTable和值总和。:
Version Value
1 5
2 4
3 2
我知道这个链接是在反射的帮助下完成的。 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
答案 0 :(得分:6)
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();
修改强>
如果您想保留其他字段,请尝试以下操作:
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();