Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq到数据集(OleDb)的InvalidCastException_C#_.net_Linq_Oledb - Fatal编程技术网

C# 使用Linq到数据集(OleDb)的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

我从使用OleDB数据集开始。在读取CSV时,其中一列中的数据被格式化为字符串,而这些实际上是数值,基本上是整数,我想将其与给定条件进行比较,使用WHERE子句提取大于0的值。我不知道如何将这些字符串值转换成整数,所以我可以对它们进行一些计算,而不会被InvalidCastException阻止

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中显示。