【问题标题】:Summing up in Datatable在数据表中总结
【发布时间】:2015-10-12 17:49:18
【问题描述】:

我有一个像

这样的数据表
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

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

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();但我在实施时遇到了错误。

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

【问题讨论】:

    标签: c# mysql datatable


    【解决方案1】:

    这是一个函数,它返回一个新的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) 将其添加到表中。

    【讨论】:

    • 我无法很好地理解上面的代码。就像数据表 A、B、C 中的每个特定名称一样,我需要为每个特定列日期为它们创建一个总列。因此,在上面的代码中,我如何指定仅从所有名称 A、列 7/13/2015 以及该日期的所有 B 中获取值等等。
    • 对不起,我误解了你的问题。原始答案对一整列求和,但没有按另一列的值进行过滤。编辑了我的答案;希望对您有所帮助。
    • 谢谢它现在更有意义了。
    猜你喜欢
    • 2018-06-14
    • 2022-01-13
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多