У меня есть таблица данных, и я хочу удалить строку, вот мой код, он бросает меня исключение
foreach (DataRow row in dt1.Rows)
{
if ((row["Name"] == "Select a Lookbook") || (row["Name"] == "Create a new Lookbook"))
{
row.Delete();
dt1.AcceptChanges();
}
}
Я даже попробовал вне, если statment и снаружи forloop все еще бросает меня ошибка какая-либо идея, как достигнуть этой задачи, это - исключение, которое я получаю:
Collection was modified; enumeration operation might not execute.
Заключительный рабочий Код:
foreach (DataRow row in dt1.Select())
{
if ((row["Name"] == "Select a Lookbook") || (row["Name"] == "Create a new Lookbook"))
{
row.Delete();
}
}
Вместо использования dt1.Rows
используйте dt1.Select ()
Цель состоит не в том, чтобы использовать саму коллекцию, а в том, чтобы использовать массив строк, который не является коллекцией Rows
Создайте список строк, которые нужно удалить, перебирая DataTable.Rows
, затем удалите их все по отдельности.
Решение без LINQ:
List<DataRow> rowsToDelete = new List<DataRow>();
foreach (DataRow row in dt1.Rows)
{
if ((row["Name"] == "Select a Lookbook") ||
(row["Name"] == "Create a new Lookbook"))
{
rowsToDelete.Add(row);
}
}
foreach (DataRow row in rowsToDelete)
{
row.Delete();
}
dt1.AcceptChanges();
Решение LINQ:
List<DataRow> rowsToDelete = dt1.Rows.AsEnumerable()
.Where(row => (row["Name"] == "Select a Lookbook") ||
(row["Name"] == "Create a new Lookbook"))
.Tolist();
foreach (DataRow row in rowsToDelete)
{
row.Delete();
}
dt1.AcceptChanges();