【问题标题】:Error while taking SUM() of column in datatable获取数据表中列的 SUM() 时出错
【发布时间】:2011-12-29 06:41:41
【问题描述】:
DataTable dtStock = new DataTable();
DataColumn dcTotalCases = new DataColumn("TotalCases");
dcTotalCases.DataType = System.Type.GetType("System.Int32");
dcTotalCases.ReadOnly = false;
dtStock.Columns.Add(dcTotalCases);

方法一

int sum = Convert.ToInt32(dtStock.Compute("Sum([TotalCases]) ", "[TotalCases] <> ''"));

当我使用这个方法时,我得到一个错误

聚合函数 Sum() 和类型:String 的使用无效。

方法二

int sum = Convert.ToInt32(dtStock.Compute("SUM(Convert([TotalCases], 'System.Int32'))", "");

当我使用这个方法时,我得到一个错误

聚合参数中的语法错误:需要单个列参数 带有可能的“子”限定符。

请帮帮我...

【问题讨论】:

标签: c# asp.net


【解决方案1】:

我相信方法 #1 应该有效 - 只是不要将您的 INT 列与空字符串进行比较!

所以使用这样的东西:

int sum = Convert.ToInt32(dtStock.Compute("Sum(TotalCases)", "[TotalCases] > 0"));

int sum = Convert.ToInt32(dtStock.Compute("Sum(TotalCases)", "[TotalCases] IS NOT NULL"));

或者你需要的任何东西——只是不要使用[TotalCases] &lt;&gt; '',因为它会将INT与一个空字符串进行比较——这是行不通的!

【讨论】:

  • 第一个选项不起作用计算需要两个参数。所以我尝试了这种方式 "int sum = Convert.ToInt32(dtStock.Compute("Sum([TotalCases]) ",""));" .仍然得到相同的错误..聚合函数 Sum() 和类型的无效使用:字符串。
  • 当我尝试这个选项时 "sum = Convert.ToInt32(dtStock.Compute("Sum([TotalCases]) ", "[TotalCases] > 0"));"我收到此错误...“无法对 System.String 和 System.Int32 执行 '>' 操作。”
  • 当我尝试您提供的第二个选项时,现在出现此错误“聚合函数 Sum() 和类型的使用无效:字符串。”
  • @JobyKurian:您的示例中 Sum(TotalCases) 之后有一个额外的空格 - 删除不必要的空格,我的两行代码都可以正常工作。
【解决方案2】:

我有一个数据表,我没有为任何列指定数据类型。该列中的所有值都是整数类型。当我使用上面的 sum() 时,我得到了错误。 Invalid usage of aggregate function Sum() and Type: String. 但是当我为列指定数据类型时,它可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多