C# DataTable AsEnumerable, выбрасывающий KeyNotFoundException: это пропущенная строка или столбец или что-то еще?

У меня проблема с перебором большой таблицы данных (300 тыс. Строк). К сожалению, проблема не воспроизводима по требованию, поэтому я не знаю, как ее решить. Минимальный код, который должен продемонстрировать проблему при правильных условиях:

var data = dataTable.AsEnumerable().Select(r => r.Field<string>("name")).ToArray();

Я вижу сообщение об ошибке:

System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at ___.<>c__DisplayClass10_0.<__>b__0(DataRow r) in __Database.cs:line XX
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)

Я подозреваю, что есть проблема с целостностью строк, так как я вижу (DataRow r) в сообщении об ошибке. Но как перечисление в DataTable может пытаться ссылаться на строку, которой нет? Я подозреваю, что это не проблема столбца, так как я не вижу сообщения об ошибке столбца, как

Column 'name' does not belong to table .
+ System.Data.DataRow.GetDataColumn(string)
+ System.Data.DataRow.get_Item(string)
+ System.Data.DataRowExtensions.Field<T>(System.Data.DataRow, string)
+ System.Linq.Enumerable.WhereSelectEnumerableIterator<TSource, TResult>.MoveNext()
+ Buffer<TElement>..ctor(IEnumerable<TElement>)
+ System.Linq.Enumerable.ToArray<TSource>(IEnumerable<TSource>)

РЕДАКТИРОВАТЬ: DataTable создается с этим запросом MySQL:

using (MySqlDataAdapter dataAdapter = new MySqlDataAdapter(commandText, connectionString))
{
    dataAdapter.SelectCommand.CommandType = commandType;
    // Use DataSet to avoid bug in MySqlDataAdapter with filling tables directly
    DataSet dataSet = new DataSet();
    dataAdapter.Fill(dataSet);
    var dataTable = dataSet.Tables[0];
}

0 ответов

Другие вопросы по тегам