У меня проблема с итерацией по большой таблице данных (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];
}