【发布时间】:2021-08-19 19:44:27
【问题描述】:
从 DataTable 中提取数据时抛出异常“对象不能从 DBNull 转换为其他类型”。显然,下面的语法不是“DBNull 感知的”。如果在转换过程中发现 DBNull,有没有办法防止抛出此异常?
Dim arrayOfDoubles()() As Double = DT.AsEnumerable().Select(Function(x) {Convert.ToDouble(x("Age")), Convert.ToDouble(x("Weight")), Convert.ToDouble(x("Location"))}).ToArray()
此外,我实际上是从一个列名的字符串数组开始的,我知道它们是双精度的。那么有没有办法将所有请求的列名连接到一个查询字符串中,然后将其注入到 Select 语句中?以这种方式,我将只获得所有列都不是 DBNull 的行的双精度数组。
【问题讨论】:
-
您希望发生什么?接受的答案将忽略这些记录,但还有其他选项,例如转换为零。始终提供完整而清晰的解释。
-
@jmcilhinney 你在上下文中是对的(我认为同样的事情),但有时人们必须知道 SO 的用户并不是全职致力于这个网站来做出明确和完整的答案(对于也存在MS指南)然后他们尝试根据他们必须致力于明确和全面响应的时间来提供帮助(不幸的是)。保持安全。
-
@G3nt_M3caj,我并没有批评你的回答,就其本身而言。我批评这个问题没有提供足够的信息,无法在不做假设的情况下提供答案。
-
答案有效。我从来没有将 null 设置为零,因为这就像说没有任何东西等于零,而没有测量值。告诉学生危险的事情,因为缺失到零会导致特征值的频率直方图中出现零尖峰 - 称为间歇性(湍流)。通过用均值、中值、最小值、最大值替换空值的热甲板插补是选项,但您不知道空值是否完全随机丢失、随机丢失或非随机丢失,因此插补可能存在偏差。
标签: vb.net exception select datatable toarray