快速从数据表中删除在其他数据表中找不到的行

本文关键字:数据表 找不到 其他 删除 | 更新日期: 2023-09-27 18:20:36

这里有两个数据表dtPartMaster([导出的零件号])和dtPartBackUp([零件号备份],[weight])现在我想删除dtPartBackUp中的行,而dtPartMaster([导出的零件号])中不存在[零件号备份]我的逻辑是这样的,但处理billon记录需要很长时间

 button1_click()
    {  int count = 0;
//line remove for clearity
    foreach (DataRow dr in dtPartBackUp.Rows)
    {
      if (!CheckPartNumber(dr["Part Number Backup"].ToString(), dtPartMaster))
       {
           dtPartBackUp.Rows[count].Delete();
       }
    count++;
    }
    dtPartBackUp.AcceptChanges();// to accept changes
    }
 private bool CheckPartNumber(string PartNumber, DataTable dt)
        {
            bool flag = false;
            DataRow dr = dt.Select("[Part Number Exported] Like '" + PartNumber + "'").FirstOrDefault();
            if (dr != null)
                flag = true;
            dr = null;
            return flag;
        }

提前感谢Amrit

快速从数据表中删除在其他数据表中找不到的行

试试这个(未测试),

这应该会根据id列返回dt1和dt2中的行列表(我认为您的id和id2列属于字符串类型)

var rows = (from r1 in dt1.AsEnumerable()
            join  r2 in dt2.AsEnumerable() on r1.Field<string>("id") equals r2.Field<string>("id2")
            select r1).ToList();
for (i = 0;i< dtPartBackUp.Rows.count;i++)
    {
      if (!CheckPartNumber(dr["Part Number Backup"].ToString(), dtPartMaster))
       {
           dtPartBackUp.Rows.removeat(i);
i--;
       }

    }
    dtPartBackUp.AcceptChanges();// to accept changes
    }
 private bool CheckPartNumber(string PartNumber, DataTable dt)
        {
            bool flag = false;
            DataRow dr = dt.Select("[Part Number Exported] Like '" + PartNumber + "'").FirstOrDefault();
            if (dr != null)
                flag = true;
            dr = null;
            return flag;
        }