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


67

我有一个包含5列的DataTable:

  • ID
  • 名称
  • 账号

数据表包含5行。

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


您是否具有ADO.Net DataTable或通过DataTable表示数据库表?
FIre Panda

数据表是仅用于提供总计还是将其绑定到另一个控件(例如gridView或Repeater)?你们当中纯粹是在提取Jonathan Woods下面的建议。
Jon P

您知道您有5行,还是更多或更少?
Andrew Cox

谢谢大家的影响。我得到了答案。
thevan 2011年

Answers:


138

要计算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();

他不想过滤表达式,他只想计算所有行的数量。在你的答案,Filteration表达方式,它会计算总和,其中EMPID = 5
穆罕默德·阿赫塔尔

它要求过滤器。我没有任何要过滤的条件。我想对数据表中的所有行求和。
thevan 2011年

周杰伦谢谢您的解决方案。它减少了我的行代码数量。
约翰,

@约翰很高兴我能提供帮助!
杰伊·里格斯

35
 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();


8

如果您有ADO.Net DataTable,则可以执行

int sum = 0;
foreach(DataRow dr in dataTable.Rows)
{
   sum += Convert.ToInt32(dr["Amount"]);
}

如果要查询数据库表,可以使用

Select Sum(Amount) From DataTable

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

5

计算数据表中列的总和,有效率为100%

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

如果您有任何条件,请像这样使用

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

2

您可以按名称分组使用Linq

  var allEntries = from r in dt.AsEnumerable()
                            select r["Amount"];

使用名称空间 using System.Linq;

您可以在Myblog上使用c#在数据表中找到样本总数,小计,总计


0

尝试这个

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.