无法将类型为“System.Double”的对象强制转换为类型为“System.String”的linq查询

时间:2017-03-20 09:56:44

标签: c# .net linq datatable

我是Linq的新手,下面的行给了我“无法将'System.Double'类型的对象强制转换为'System.String'”。我该如何解决?

$conn = new mysqli($servername, $username, $password, "DATABASE_NAME_HERE");

我正在查询DataTable列。

3 个答案:

答案 0 :(得分:2)

我怀疑您在尝试过滤等于1的行时遇到NullReferenceException。为避免这种情况,请返回带有Field<double?>()的可空类型,例如:

dt.AsEnumerable()
  .Where(dataRow => dataRow.Field<double?>(dc.ColumnName) == 3m))
  .Count() > 3

如果字段为空,则比较将失败。

如果要在将NULL转换为例如0时检索列的值,可以使用??运算符:

.Select( dataRow => dataRow.Field<double?>(dc.ColumnName) ?? 0m)

答案 1 :(得分:1)

您尝试转换为字符串的行的数据类型为double。 而不是dataRow.Field<string>(dc.ColumnName),它应该是dataRow.Field<double>(dc.ColumnName)

答案 2 :(得分:0)

首先你可以参考这个Answer,但我会尝试简化这个问题。

  

如果指定的DataColumn的值为null并且T是引用类型或可空类型,则返回类型将为null。 Field方法不会返回Value。

DataRowExtensions.Field<T> Method (DataRow, String)

它出现在.NET 3.5中,它提供对行中每列的强类型访问,并且还支持类型。

因此您可以使用Convert.ToDouble(row["dc.ColumnName"])来避免可以为空的值返回。