Excel LINQ操作创建强制转换异常
从excel文件中读取由填充的数据表中的数据时,获取“无法将类型为'System.Double'的对象强制转换为类型为'System.String'。列数据类型为Double时出现异常。我的代码如下所示Excel LINQ操作创建强制转换异常,excel,linq,c#-4.0,datatable,Excel,Linq,C# 4.0,Datatable,从excel文件中读取由填充的数据表中的数据时,获取“无法将类型为'System.Double'的对象强制转换为类型为'System.String'。列数据类型为Double时出现异常。我的代码如下所示 var importedProducts = dtImportedData.AsEnumerable() .Where(dtProduct => !string.IsNullOrWhiteSpace(dtProduct.Field<s
var importedProducts = dtImportedData.AsEnumerable()
.Where(dtProduct => !string.IsNullOrWhiteSpace(dtProduct.Field<string>("product_id")))
.Select(dtProduct => new
{
product_id = dtProduct.Field<string>("product_id").Trim(),
product_qty = Convert.ToInt32(dtProduct.Field<double>("product_qty "))
}).ToList();
var importedProducts=dtImportedData.AsEnumerable()
.Where(dtProduct=>!string.IsNullOrWhiteSpace(dtProduct.Field(“产品id”))
.选择(dtProduct=>new
{
product_id=dtProduct.Field(“product_id”).Trim(),
产品数量=转换为32(dtProduct.Field(“产品数量”))
}).ToList();
当product_id列具有文本数据类型时,一切正常。但当存在双数据类型时,它会引发异常
我已经尝试了中的解决方案,如果
产品id
是一个双精度而不是字符串,那么为什么要将其转换为字符串
.Where(row => !string.IsNullOrWhiteSpace(row.Field<double>("product_id").ToString()))
.Select(row => new
{
product_id = row.Field<double>("product_id"),
product_qty = (int)row.Field<double>("product_qty")
})
如果您不知道DataTable
中DataColumn
的类型,可以在调试器中执行以下操作:
dtImportedData.Columns["product_id"].DataType;
这是您必须在字段中使用的内容
如果类型确实如注释所示发生变化,则这是最安全的:
.Where(row => !string.IsNullOrWhiteSpace(row["product_id"].ToString()))
.Select(row => new
{
product_id = row["product_id"].ToString().Trim(),
product_qty = int.Parse(row["product_qty"].ToString().Trim())
})
那么,如果product\u id
是一个double而不是字符串,那么为什么要将其转换为string
.Where(row => !string.IsNullOrWhiteSpace(row.Field<double>("product_id").ToString()))
.Select(row => new
{
product_id = row.Field<double>("product_id"),
product_qty = (int)row.Field<double>("product_qty")
})
如果您不知道DataTable
中DataColumn
的类型,可以在调试器中执行以下操作:
dtImportedData.Columns["product_id"].DataType;
这是您必须在字段中使用的内容
如果类型确实如注释所示发生变化,则这是最安全的:
.Where(row => !string.IsNullOrWhiteSpace(row["product_id"].ToString()))
.Select(row => new
{
product_id = row["product_id"].ToString().Trim(),
product_qty = int.Parse(row["product_qty"].ToString().Trim())
})
你有一个专栏可以神奇地把它的类型改成另一种类型?@Steve,你说得对。用户根据自己的意愿更改excel列数据类型,我们无法控制它。从逻辑上讲,您不应该使用相同的代码读取不同的数据类型。因此,您有一个列可以神奇地将其类型更改为另一种类型?@Steve,您是对的。用户根据自己的意愿更改excel列数据类型,我们无法控制它。从逻辑上讲,您不应该使用相同的代码来读取不同的数据类型。Tim Schmelter,product_id数据类型为string。但我正在从excel文件填充dtImportedData变量,用户不断更改excel列数据类型。@user1926138:我不明白,它是字符串还是双精度,还是在更改,是什么?你看到我在答案末尾的提示了吗?它在变化。用户可以使用excel工作表中的任何数据类型,我需要将其转换为字符串。@user1926138:添加了另一种方法Tim Schmelter,product_id数据类型为字符串。但我正在从excel文件填充dtImportedData变量,用户不断更改excel列数据类型。@user1926138:我不明白,它是字符串还是双精度,还是在更改,是什么?你看到我在答案末尾的提示了吗?它在变化。用户可以使用excel工作表中的任何数据类型,我需要将其转换为字符串。@user1926138:添加了另一种方法