查找重复并将记录合并到单个数据表c#中

我能够从DataTable行中找到重复项。 如下:

var groups = table.AsEnumerable() .GroupBy(r => new { c1 = r.Field("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 

我知道这个链接是在reflection的帮助下完成的。 http://forums.asp.net/t/1570562.aspx/1

还有其他办法吗?

编辑:但是,如果我有两列以上,比如五列,我仍然想在Value列上进行求和,并且还需要resulatant summed datatable中的其他列数据。 怎么做? 在这里,我在结果DataTable中获得了Version和Value。 我也希望其他列具有值。 如下:

版本col1 col2值

 1 AA 2 2 BB 2 2 BB 1 1 AA 3 2 BB 1 3 CC 2 

 var result = table.AsEnumerable() .GroupBy(r => r.Field("Version")) .Select(g => { var row = table.NewRow(); row.ItemArray = new object[] { g.Key, g.Sum(r => r.Field("Value")) }; return row; }).CopyToDataTable(); 

编辑:

如果您想保留其他字段,请尝试以下操作:

 var result = table.AsEnumerable() .GroupBy(r => new { Version = r.Field("Version"), Col1 = r.Field("Col1"), Col2 = r.Field("Col2") }) .Select(g => { var row = g.First(); row.SetField("Value", g.Sum(r => r.Field("Value"))); return row; }).CopyToDataTable();