коллекция была изменена операция перечисления может не выполняться при работе с datatable и dataset

#c# #datatable #dataset

#c# #datatable #dataset

Вопрос:

Я пытаюсь получить файл Excel из определенного пути к файлу и объединить набор данных с другим набором данных. Прямо сейчас у меня есть это. Но я продолжаю получать ошибку : collection was modified enumeration operation might not execute . Я надеялся, что кто-нибудь сможет мне помочь. Заранее спасибо

                     FileStream stream = File.Open("MyFilePath", FileMode.Open, FileAccess.Read);
                    IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
                    DataSet resultReader = excelReader.AsDataSet();
                    excelReader.Close();

                    DataTable excelTable = resultReader.Tables[0];

                    foreach (DataRow dr in excelTable.Rows)
                    {
                        dr.Table.Rows.Add();
                        excelTable.AcceptChanges();
                    }

                    resultReader.Tables.Add(excelTable);

                    ds.Merge(resultReader);
``
 

Ответ №1:

Для каждой строки в таблице вы добавляете дополнительную пустую строку в ту же таблицу… Почему? Поскольку:

 dr.Table.Rows == excelTable.Rows
 

Как указано в ошибке, вы обновляете то, что перечисляете, и вы (почти при всех обстоятельствах) не можете этого сделать.

Предполагая, что это то, что вы действительно хотите сделать (мне это кажется подозрительным), вы можете получить аналогичные результаты, используя for цикл:

 var len = excelTable.Rows.Count;
for (var i = 0; i < len;   i)
    excelTable.Rows.Add();
 

Или, как указано в комментариях, вы можете использовать ToList для создания копии, которую затем можно перечислять:

 foreach (DataRow dr in excelTable.AsEnumerable().ToList()) {
   dr.Table.Rows.Add();
} 
 

Комментарии:

1. Спасибо, только добавленная часть пуста. У вас есть какие-либо идеи, что я должен делать?