我是Linq的新手,下面的行给了我“无法将'System.Double'类型的对象强制转换为'System.String'”。我该如何解决?
$conn = new mysqli($servername, $username, $password, "DATABASE_NAME_HERE");
我正在查询DataTable列。
答案 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"])
来避免可以为空的值返回。