5

我能够从 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();

现在,我想将所有重复的记录合并为单个并将其汇总为 Value 列值。

非常类似于以下内容:

有重复的数据表:

Version   Value  
1  2

2  2

2  1

1  3

2  1

3  2 

没有重复的数据表和值总和。:

Version   Value  
1  5

2  4

3  2 

我知道这个链接在反射的帮助下做到了这一点。 http://forums.asp.net/t/1570562.aspx/1

还有其他方法吗?

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

版本 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 
4

1 回答 1

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();
于 2012-10-25T06:42:48.147 回答