2010-02-15 103 views
2

我正在尝试使用DbfDotNet库(http://dbfdotnet.codeplex.com)并替换当前的ADO.NET读取非常大的dbf文件(350.000+条记录)的方法。 我试过现有的示例来阅读我的文件并记录它们的自定义数据视图,我对速度印象非常深刻。 在我的原始代码中,我使用dbf文件的内容填充数据表,并使用LINQ查询来填充我的组合框。如何使用DbfDotNet填充Windows窗体组合框?

我试着重写m LINQ查询来使用DbfDotNet表格对象来填充我的组合框,但我仍然是一个新手机智的LINQ,不能让它工作。

有人能帮我吗?

这是我当前的代码:

 
var distinctPostalCodes = (from row in this.fileContent.AsEnumerable() 
          select new 
          { 
           code = row.Field(columnNameCode), 
           name = row.Field(columnNameName) 
          }).OrderBy(x => x.code).Distinct(); 

哪里this.fileContent是我与地址数据的DataTable。

回答

0
var distinctPostalCodes = (from row in new DataTable().AsEnumerable() 
           select new 
           { 
            code = row[columnNameCode], 
            name = row[columnNameName] 
           }).OrderBy(x => x.code).Distinct(); 

试试这个,它对我很好,你能告诉我结果还是错误?

+0

的仅一个)[]和字段(之间不同是最后一个返回强类型数据 – abatishchev 2010-02-15 13:33:22

+0

不,它不会检索强类型对象,选择new实际上会检索匿名类型,但在这种情况下,您将具有不可感知性,并且可以将其直接绑定到下拉列表 – 2010-02-15 13:52:38

0

如果问题出在田式尝试

code = row.Field<int>(columnNameCode), 
name = row.Field<string>(columnNameName) 
0

我得到的AsEnumerable()编译错误与我的原代码: 实例参数:无法从转换‘DbfDotNet.DbfTable’到' System.Data.DataTable' 'DbfDotNet.DbfTable'不包含'AsEnumerable'的定义,并且最佳扩展方法重载'System.Data.DataTableExtensions.AsEnumerable(System.Data.DataTable)'有一些无效参数

今晚我会在新的DataTable()中尝试使用行的建议。AsEnumerable()但我对这个样本有些困惑。 正在使用哪些数据?我的this.fileContent从不使用?

0

我终于找到了:

 DbfDotNet.Linq.DbfTable<DbfDotNet.DbfRecord> dbftable = new DbfDotNet.Linq.DbfTable<DbfDotNet.DbfRecord>(@"ADRESSER.dbf", System.Text.Encoding.ASCII, DbfDotNet.DbfVersion.dBaseIII); 
     // Fill grid: 
     dbfTableView1.DbfTable = dbftable; 

     var distinctPostalCodes = (from row in dbftable.AsEnumerable() 
            select new 
            { 
             code = row.GetField(4), 
             name = row.GetField(5) 
            }).OrderBy(x => x.code).Distinct(); 

     this.comboBox1.DataSource = distinctPostalCodes.ToArray(); 
     this.comboBox1.DisplayMember = "code"; 
     this.comboBox1.ValueMember = "code"; 

太糟糕了这个代码现在作为当我用ADO.NET之前慢;(