如何在asp.net中计算datatable列的总和?

68

我有一个 DataTable,其中有 5 列:

  • ID(编号)
  • Name(姓名)
  • Account Number(账户号码)
  • Branch(分行)
  • Amount(金额)

该 DataTable 包含 5 行。

如何在标签控件中显示“总金额”作为 Amount 列的总和?


你有ADO.Net的DataTable吗?还是你指的是数据库表格? - FIre Panda
数据表仅用于提供总计,还是被绑定到另一个控件,比如gridView或repeater?如果你只是纯粹地提取总数,请使用Jonathan Woods以下的建议。 - Jon P
你知道你有5行,还是可能更多或更少? - Andrew Cox
谢谢大家的努力。我已经得到了答案。 - thevan
10个回答

147

要计算DataTable中一列的总和,可以使用DataTable.Compute方法。

以下是来自链接的MSDN文章的用法示例:

DataTable table = dataSet.Tables["YourTableName"];

// Declare an object variable.
object sumObject;
sumObject = table.Compute("Sum(Amount)", string.Empty);

像这样在您的总金额标签中显示结果:

lblTotalAmount.Text = sumObject.ToString();

他不想要筛选表达式,只想计算所有行的总数。在你的回答中,“筛选表达式”意味着它将计算EmpId = 5的总和。 - Muhammad Akhtar
它要求进行筛选。我没有任何条件进行筛选。我想对数据表中的所有行求和。 - thevan
Jay,感谢您提供的解决方案。它减少了我的代码行数。 - John

39
 this.LabelControl.Text = datatable.AsEnumerable()
    .Sum(x => x.Field<int>("Amount"))
    .ToString();

如果你想要筛选结果:

 this.LabelControl.Text = datatable.AsEnumerable()
    .Where(y => y.Field<string>("SomeCol") != "foo")
    .Sum(x => x.Field<int>("MyColumn") )
    .ToString();

15

你可以这样做...

DataRow[] dr = dtbl.Select("SUM(Amount)");
txtTotalAmount.Text = Convert.ToString(dr[0]);

8
如果您有一个 ADO.Net DataTable,您可以执行以下操作:
int sum = 0;
foreach(DataRow dr in dataTable.Rows)
{
   sum += Convert.ToInt32(dr["Amount"]);
}

如果你想查询数据库表,可以使用以下方式:

Select Sum(Amount) From DataTable

6

计算Datatable中列的总和,100%有效

lbl_TotaAmt.Text = MyDataTable.Compute("Sum(BalAmt)", "").ToString();

如果你想要有任何条件,请像这样使用

   lbl_TotaAmt.Text = MyDataTable.Compute("Sum(BalAmt)", "srno=1 or srno in(1,2)").ToString();

5
  public decimal Total()
    {
      decimal decTotal=(datagridview1.DataSource as DataTable).Compute("Sum(FieldName)","");
      return decTotal;
    }

2
您可以使用按名称分组的Linq。
  var allEntries = from r in dt.AsEnumerable()
                            select r["Amount"];

使用命名空间 using System.Linq;

你可以在C#中使用datatable找到样本总数、小计和总计,详情请查看我的博客


0

我认为这个问题已经解决了

using System.Linq;


(datagridview1.DataSource as DataTable).AsEnumerable().Sum(c => c.Field<double>("valor"))

0
尝试这个。
int sum = 0;
foreach (DataRow dr in dt.Rows)
{
     dynamic value = dr[index].ToString();
     if (!string.IsNullOrEmpty(value))
     { 
         sum += Convert.ToInt32(value);
     }
}

0
如果您想在cshtml文件中执行此操作,可以像这样编写代码(包括LAMBDA表达式):
<td><b>£@Model.Sum(i => i.Amount)</b></td>

你可以移除HTML标签,我只是为了帮助示例而将它们留在那里。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接