查找重复并将记录合并到单个数据表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();