【问题标题】:How To Convert The DataTable Column type?如何转换 DataTable 列类型?
【发布时间】:2011-07-04 05:59:06
【问题描述】:

我正在尝试实现:

dtGroupedBy.Compute("sum(POWER)",dvv.RowFilter); 

这是一个错误的结果:

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

我们如何将它转换成它的列类型??

【问题讨论】:

  • 你能发布你得到的确切错误,而不是你对错误的解释
  • @Tarun 我收到此错误(聚合函数 Sum() 和类型:String 的使用无效。)
  • 您使用@Deepak 解决方案解决了您的问题吗?

标签: c# datatable column-types


【解决方案1】:

Compute 方法支持表达式,并且它们支持您可以在表达式内部使用的CONVERT function

例如,您可以计算列的总和,例如

MyDataTable.Compute("Sum(Convert(your column name, 'Data Type'))") 

【讨论】:

  • 我无法使用您的代码... 异常:“聚合参数中的语法错误:需要一个可能带有 'Child' 限定符的列参数。”
【解决方案2】:

这取决于您创建DataTable 的方式。如果它只是直接来自 SQL,您应该考虑更改 SQL 本身,以便在您获取它时转换 POWER 列。

但是,如果值首先应该始终是数字,我强烈建议您重新访问您的数据库架构 - 如果可能的话,更改列类型会更简洁。

【讨论】:

  • 实际上我是从通过 Internet 以 XML 格式从特定链接获取的数据中填充此表
  • @Syed:它是一个序列化的数据表吗?还是您自己转换的任意 XML?
  • 我以字节为单位获取这些数据,然后以字符串格式对其进行编码,然后以 XML 格式保存
  • @Syed:但是首先生成此 XML 的原因是什么,您如何将 XML 转换为 DataTable?
【解决方案3】:

您不能在字符串字段上使用 Sum() 聚合函数。

你可以做两件事

  • 重新定义数据库中现有的列项 (或架构)是一个数字字段。(推荐)
  • 对传递给聚合函数的数据进行System.Int32 转换。 所以您可以执行以下操作

dtGroupedBy.Compute("sum(CONVERT(" + 电源 + ",'System.Int32'))",dvv.RowFilter);

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2015-04-25
    相关资源
    最近更新 更多