循环遍历数据表并删除行

7 .net c# sql asp.net

我已经从2个不同的服务器填充了一个Datatable.我可以在我的长度> 0的地方进行调整,我想要做的是删除未击中的行.以下是我所拥有的内容摘要

DataRow[] dr = payments.dtPayments.Select(myselect);

if (dr.Length > 0)
{
   for (int a = 0; a < dr.Length; a++)
   {
      if (thisOption == true)
         dr[0].Delete();
      else if (otherOption == true)
      {
         dr[0]["Date"] = myDataReader["date"].ToString().Trim();
         dr[0]["Pay"] = payTypeName(myDataReader["ccdsrc"].ToString()
                                                          .Trim());
      }
   }
}
if (dr.Length == 0)
{                        
   if (LastOption == true)
   {
     //DataRow should be removed
   }                        
}
Run Code Online (Sandbox Code Playgroud)

Yon*_*ona 18

我不确定我是否完全理解你的问题,但是当你还在循环时,你似乎试图从集合中删除一个条目.(这会导致数组索引错误)

您应该在新集合中保存对要删除的每个条目的引用,然后从旧集合中删除所有新条目:

DataRow[] dr = payments.dtPayments.Select(myselect);
List<DataRow> rowsToRemove = new List<DataRow>();

for (int a = 0; a < dr.Length; a++) {
    if(/* You want to delete this row */) {
        rowsToRemove.Add(dr[a]);
    }
}

foreach(var dr in rowsToRemove) {
    payments.dtPayments.Rows.Remove(dr);
}
Run Code Online (Sandbox Code Playgroud)


tva*_*son 4

如果 dr.Length 为零,则您的选择不会返回任何行。如果您想删除与您的条件不匹配的行,那么我会将其实现为不同类型的查询。也可能是我完全误解了你的问题。您能否更新您的问题以显示您的 SQL 并指出代码示例中出现问题的位置:在循环内部或在您发表评论的循环之后?