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

数据表+;使用循环删除c#中的一行,c#,asp.net,datatable,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(); } } 我甚至尝试了if station外部,而forloop

我有一个数据表,我想删除一行,这是我的代码,它引发了一个异常

foreach (DataRow row in dt1.Rows)
{
    if ((row["Name"] == "Select a Lookbook") || (row["Name"] == "Create a new Lookbook"))
    {
        row.Delete();
        dt1.AcceptChanges();
    }
}
我甚至尝试了if station外部,而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();                                       
    }

}

在迭代
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();
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();
List rowsToDelete=new List();
foreach(dt1.Rows中的数据行)
{
如果((行[“名称”]=“选择一个查找簿”)|
(行[“名称”]=“创建新的Lookbook”))
{
rowsToDelete.Add(行);
}
}
foreach(rowsToDelete中的DataRow行)
{
行。删除();
}
dt1.AcceptChanges();
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();
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();
List rowsToDelete=dt1.Rows.AsEnumerable()
.Where(row=>(row[“Name”]==“选择一个Lookbook”)|
(行[“名称”]=“创建新的Lookbook”))
.Tolist();
foreach(rowsToDelete中的DataRow行)
{
行。删除();
}
dt1.AcceptChanges();

使用
dt1.Select()代替
dt1.Rows


这里的目标不是使用集合本身,而是使用一个不是
行的行数组
集合当我遇到这个问题时,我就是这样做的

            Dim index As Integer = 0
            Dim count As Integer = resultsDT.Rows.Count - 1
            For i As Integer = 0 To count
                If resultsDT.Rows(index).Item("something") = "something" Then
                    resultsDT.Rows(index).Delete()
                    resultsDT.AcceptChanges()
                    index = index - 1
                End If

                index = index + 1
                i = i + 1
            Next

我知道这是一个非常好的答案,但我必须同意皮埃尔的答案,因为我相信这很容易做到。我真的很感谢你的帮助。工作完全如我所愿,谢谢