总结在Datatable中

时间:2015-07-22 17:33:50

标签: c# mysql datatable

我有像

这样的数据表
Full Name    ID   7/13/2015    7/14/2014
A             1       20          30
A             2       30          50
B             3       50          70
B             4       60          30
C             5       20          30
C             6       30          80
C             7       10          30

我想在此数据表中再添加一行,该行包含特定日期中每个人的SUM

Full Name    ID   7/13/2015    7/14/2014
A             1       20          30
A             2       30          50

A         total       50          80

B             3       50          70
B             4       60          30
C             5       20          30
C             6       30          80
C             7       10          30

我知道如何创建新行并添加名称和ID,但我们可以使用c#模块来添加特定的总和。我抬头看起来像是table_name.Compute();但我实现这个错误。

  • 请注意,列全名具有空格值,该列中的值也可以包含空格。

1 个答案:

答案 0 :(得分:0)

这是一个函数,它返回一个新的object[],它将给定表中的每一行与给定列索引中的指定值相匹配。匹配的行在所有其他列上求和,并在相应的索引中返回总和。

private object[] GetSumRow(DataTable table, string nameToMatchAgainst, int nameColumnIndex = 0)
{
    object[] sumRow = new object[table.Columns.Count];

    IEnumerable<DataRow> rows = table.Rows.Cast<DataRow>().Where(r => r[nameColumnIndex].ToString() == nameToMatchAgainst);
    for (int i = 0; i < table.Columns.Count; i++)
    {
        if (i == nameColumnIndex)
        {
            sumRow[i] = nameToMatchAgainst;
        }
        else
        {
            sumRow[i] = rows.Sum(r => int.Parse(r[i].ToString()));
        }
    }

    return sumRow;
}

因此,调用var sumRow = GetSumRow(yourExampleTable, "A")会返回["A", 3, 50, 80],然后您可以使用yourExampleTable.Rows.Add(sumRow)将其添加到表中。