【问题标题】:SUM datatable column with compute but NO filter具有计算但没有过滤器的 SUM 数据表列
【发布时间】:2011-11-19 22:33:58
【问题描述】:

当我将一个项目放入其中进行过滤时,这似乎有效,但我不想添加过滤器,即很高兴对列求和,就是这样。

我试过传入 string.empty 和 "" 但不高兴:

object objColTotal;
objColTotal = _dataSetDataTable.Compute("Sum(Price)", "");
decimal tot = Convert.ToDecimal(objColTotal);

【问题讨论】:

    标签: asp.net datatable sum


    【解决方案1】:

    空字符串应该可以工作。

    您始终可以使用您确定会包含所有记录的过滤器。


    小数列的快速测试:

    var dt = new DataTable();
    dt.Columns.Add("DecCol1", typeof(decimal));
    dt.Columns.Add("StrCol1");
    dt.Rows.Add(new object[] { 1.1, "r1"});
    dt.Rows.Add(new object[] { 2.2, "r2" });
    dt.Rows.Add(new object[] { 3.3, "r3" });
    
    object sum = dt.Compute("SUM(DecCol1)", "");
    Console.WriteLine(sum);
    

    我得到正确答案:6.6

    【讨论】:

    • 该列是十进制数据类型。我想知道这是否会引起问题,或者是否有办法解决?
    • @Dkong 我不这么认为;我进行了快速测试,它对我有用。
    • 感谢您帮助杰。我以为我快疯了,它一直带回零,但它是一长列值列表,其中 -ive 和 +ive 值总计为零。
    • @Dkong 每个人都需要一次又一次地进行健全性检查。很高兴为您提供帮助
    【解决方案2】:

    注意两件事

    • 如果您的列名有空格,则必须使用括号,并且不接受单引号或双引号。
    • 另请注意,Compute 返回一个对象,该对象将其向上转换为 (int) 会导致错误,您必须使用其他方法,例如以下示例

    样本:

    int Dones = int.Parse(dt.Compute("sum(Done)", "").ToString());
    int InProgresss = int.Parse(dt.Compute("sum([In Progress])", "").ToString())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 2020-09-12
      相关资源
      最近更新 更多