繁体   English   中英

快速从数据表中删除在另一个数据表中找不到的行

[英]quickly Remove row from datatable which not find in another datatable

在这里,我有两个数据表dtPartMaster([已导出零件号])和dtPartBackUp([已零件号备份],[重量])现在我要删除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;

        }

在此先感谢阿姆利特

试试这个(未经测试),

这应该基于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;

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM