使用Linq to DataSet(OleDb)的InvalidCastException

时间:2015-12-07 16:37:23

标签: c# .net linq oledb

我开始将DataSet与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());

    }

}

0 个答案:

没有答案