Как заполнить комбинированный список Windows Forms, используя DbfDotNet? - PullRequest
2 голосов
/ 15 февраля 2010

Я пытаюсь использовать библиотеку DbfDotNet (http://dbfdotnet.codeplex.com)) и заменить текущие методы ADO.NET для чтения очень большого файла dbf (более 350 000 записей). Я попробовал существующие образцы, чтобы прочитать мой файл и подать их пользовательский Dataview, и я очень впечатлен скоростью. В моем исходном коде я заполняю таблицу данными содержимым dbf-файла и использую запрос LINQ для заполнения своих списков.

Я пытался переписать 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 с адресными данными.

Ответы [ 4 ]

0 голосов
/ 19 февраля 2010

Я наконец нашел это:

        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; (

0 голосов
/ 15 февраля 2010

Если проблема в типе полей, попробуйте

code = row.Field<int>(columnNameCode),
name = row.Field<string>(columnNameName)
0 голосов
/ 17 февраля 2010

Я получаю ошибку компиляции в AsEnumerable () с моим исходным кодом: Аргумент экземпляра: невозможно преобразовать из 'DbfDotNet.DbfTable' в 'System.Data.DataTable' «DbfDotNet.DbfTable» не содержит определения «AsEnumerable», а лучшая перегрузка метода расширения «System.Data.DataTableExtensions.AsEnumerable (System.Data.DataTable)» имеет недопустимые аргументы

Сегодня вечером я попробую предложение с из строки в новом DataTable (). AsEnumerable (), но я немного озадачен этим примером. Какие данные используются? Мой this.fileContent никогда не используется?

0 голосов
/ 15 февраля 2010
var distinctPostalCodes = (from row in new DataTable().AsEnumerable()
                               select new
                               {
                                   code = row[columnNameCode],
                                   name = row[columnNameName]
                               }).OrderBy(x => x.code).Distinct();

Попробуйте, у меня все работает нормально, можете подсказать результат или ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...