数据表+使用循环删除c#中的一行

Dev*_*per 12 c# asp.net datatable

我有一个数据表,我想在这里删除一行是我的代码它给我一个例外

foreach (DataRow row in dt1.Rows)
{
    if ((row["Name"] == "Select a Lookbook") || (row["Name"] == "Create a new Lookbook"))
    {
        row.Delete();
        dt1.AcceptChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

我甚至尝试在if语句之外,并且在forloop之外仍然会抛出错误任何想法如何实现此任务这是我获得的异常:

Collection was modified; enumeration operation might not execute.
Run Code Online (Sandbox Code Playgroud)

最终工作守则:

foreach (DataRow row in dt1.Select())
{
    if ((row["Name"] == "Select a Lookbook") ||    (row["Name"] == "Create a new Lookbook"))
    {
        row.Delete();                                       
    }

}
Run Code Online (Sandbox Code Playgroud)

Pie*_*ant 18

而不是使用dt1.Rows,使用dt1.Select()

这里的目标是不使用集合本身,而是行的数组,它是不是Rows集合


Jon*_*eet 9

在迭代时创建要删除的行列表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();
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)