[英]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.