c# - 在新列中按总和显示分组

标签 c# datatable sum

我想在同一数据表的新列中按总和显示分组。 例如:

input

我希望输出是这样的:

output

我试过如下:

  1. 根据sno分组并存储在不同的表中。
  2. 通过使用 for 循环,我将总值分配给旧数据表。
for (int o = 0; o < returndata.Rows.Count;o++)
{
    for (int i = 0; i < table.Rows.Count;i++)
    {
        if(returndata.Rows[o]["sno"].ToString() == table.Rows[i]["sno"].ToString())
        {
            table.Rows[i]["total"] = returndata.Rows[o]["total"];
        }
    }
}

有没有其他方法可以使用 c# linq 直接分配总和值?

最佳答案

虽然这个问题是针对 c# 标记的,并且在 c# 中有很多方法可以做到这一点,但我只想强调数据库比编程语言更适合数据操作/转换。像这样的事情就应该交给数据库,尤其是数据量很大的时候。您所需要做的就是修改查询,让数据库完成这部分工作。

例如在 SQL Server 中,它应该是这样的:

select sno, amount, total = sum(amount) over (partition by sno) from YourTable

这将为您提供您正在寻找的东西,而不会减慢您的应用程序。

enter image description here

编辑,在 OP 的评论之后

当更改查询不是一个选项时,在 .NET 中执行此操作的简单方法是使用 DataTable.Compute 方法。

foreach (DataRow row in returndata.Rows)
{
    row["total"] = returndata.Compute("sum(amount)", "sno=" + row["sno"].ToString());
}

datatable compute

关于c# - 在新列中按总和显示分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66703694/

相关文章:

c# - TPL 中断未处理的异常

c# - 从类中填充下拉列表

php - 如何让 "th "只出现一次

javascript - 无法在 DataTables 的 drawCallback() 中以编程方式选择行

javascript - 在特定情况下,数组中数字的总和

c# - 如何将 .NET exe 转换为 native Win32 exe?

c# - 将图像从数据库显示到picturebox winforms c#

javascript - 数据表服务器端处理

mysql - SQL 2表合二为一

bash - 如何使用 bash 计算特定列的总和?