聚合数据集

时间:2010-08-13 10:28:27

标签: c# linq dataset aggregate

如何聚合(使用linq)数据集的一列的值,而另一列是相同的。

例如,我的列是

Row1  Row2  

2     3  
4     5  
6     7  
2     2  
6     4  
7     4  
2     4

我需要这样的东西

Row1 Row2  

2    9  
4    5  
6    11  
7    4

编辑:“Row2”中的值是“Row1”的编号。所以(例如:2)的值必须聚合到一个新的数据表中,其中只有(2)的单个条目。 如果问题含糊不清,我很抱歉。

3 个答案:

答案 0 :(得分:5)

您可以使用LINQ聚合行并将结果复制到新表:

DataTable source = // whatever
DataTable dest = source.Clone();

var aggregate = source
    .AsEnumerable()
    .GroupBy(row => row.Field<int>("Row1"))
    .Select(grp => new { Row1 = grp.Key, Row2 = grp.Select(r => r.Field<int>("Row2")).Sum() });

foreach(var row in aggregate)
{
    dest.Rows.Add(new object[] { row.Row1, row.Row2 });
}

答案 1 :(得分:1)

添加对System.Data.DataSetExtensions.dll

的引用
DataSet ds = ..
DataTable table = ds.Tables[0]; // or ds.Tables["YourTableName"];

var q = from row in table.AsEnumerable()
        group row by row.Field<int>("Row1") into g
        select new
        {
            Row1 = g.Key,
            Row2 = g.Sum(s => s.Field<int>("Row2"))
        };

如果您需要按多列分组:

var q = from record in table.AsEnumerable()
        group record by new { Row1 = record.Field<int>("Row1"), Row2 = record.Field<int>("Row3") } into g
        select new
        {
            Row1 = g.Key,
            Row2 = g.Sum(s => s.Field<int>("Row2"))
        };

答案 2 :(得分:0)

如果您不想(想)使用Linq,可以尝试this Microsoft HOWTO并创建自己的帮助类。