2010-02-15 102 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之前慢;(