#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. Спасибо, только добавленная часть пуста. У вас есть какие-либо идеи, что я должен делать?