C# 使用Linq到数据集(OleDb)的InvalidCastException
我从使用OleDB数据集开始。在读取CSV时,其中一列中的数据被格式化为字符串,而这些实际上是数值,基本上是整数,我想将其与给定条件进行比较,使用WHERE子句提取大于0的值。我不知道如何将这些字符串值转换成整数,所以我可以对它们进行一些计算,而不会被InvalidCastException阻止C# 使用Linq到数据集(OleDb)的InvalidCastException,c#,.net,linq,oledb,C#,.net,Linq,Oledb,我从使用OleDB数据集开始。在读取CSV时,其中一列中的数据被格式化为字符串,而这些实际上是数值,基本上是整数,我想将其与给定条件进行比较,使用WHERE子句提取大于0的值。我不知道如何将这些字符串值转换成整数,所以我可以对它们进行一些计算,而不会被InvalidCastException阻止 public static void Main(string[] args) { string csvFile = ConfigurationManager.AppSettings["csvFi
public static void Main(string[] args)
{
string csvFile = ConfigurationManager.AppSettings["csvFile"];
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ csvFile + ";Extended Properties=\"Text;HDR=true;FMT=Delimited\"";
DataSet ds = new DataSet();
using (OleDbConnection con = new OleDbConnection(connectionString))
{
string sql = string.Format("SELECT * FROM [DE.csv]", csvFile);
OleDbDataAdapter adapter = new OleDbDataAdapter(sql, con);
adapter.Fill(ds);
ds.Tables[0].TableName = "Table1";
var lista = ds.Tables["Table1"]
.AsEnumerable()
.Where(r => r.Field<int>("#_Comp#") > 0) // // Invalid Cast Exception (!!)
.Select(i => new { Name = i.Field<int>("#_Comp#") });
Console.WriteLine(lista.Count());
}
}
您可以确认在所有行中_Comp可转换为int?没有空值没有空字符串?我在Excel中检查所有值是否都已填充。在记事本++中,数字以引号返回,这在excel中是不会发生的-我还没有尝试这些引号是否会引起问题。在调试时查看ds.Tables[0],只需查看引号是否存在。我想不会。然后用转换替换铸件。Int.Parse或Convert.ToString。字符串不是int,即使字符串内容看起来像数字,也不能强制转换。int0无效。感谢您对此进行研究。其中i=>Convert.ToInt32i.Field\u Comp>0完成了这项工作。这些引用在VisualStudio中显示。