C# 快速从datatable中删除在另一个datatable中找不到的行
这里我有两个数据表dtPartMaster([Part Number Exported])和dtPartBackUp([Part Number Backup],[weight]) 现在,我想删除dtPartBackUp中的行,而dtPartMaster中不存在[part Number Backup]([part Number Exported]) 我的逻辑是这样的,但处理billon记录需要很长时间C# 快速从datatable中删除在另一个datatable中找不到的行,c#,C#,这里我有两个数据表dtPartMaster([Part Number Exported])和dtPartBackUp([Part Number Backup],[weight]) 现在,我想删除dtPartBackUp中的行,而dtPartMaster中不存在[part Number Backup]([part Number Exported]) 我的逻辑是这样的,但处理billon记录需要很长时间 button1_click() { int count = 0; //line re
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试试这个(未测试)
这将返回dt1和dt2中基于id列的行列表(我认为您的id和id2列是字符串类型)
var rows=(来自dt1.AsEnumerable()中的r1)
将r2加入到r1.Field(“id”)上的dt2.AsEnumerable()中等于r2.Field(“id2”)
选择r1.ToList();
用于(i=0;i
返回0行
,哪个方法返回0行?compareTodatable()返回具有0行的datatable和第一个方法“Check()”工作正常但耗时太长为什么在Check方法中使用“Like”?为什么不简单地使用“=”?在任何数据库中实现高性能的唯一方法是使用适当的SQL语句。在您的情况下,您试图使用客户端游标来处理10亿条记录=>非常慢的Pawan,您的代码工作正常但不正确。只返回几行Shello Pawan,请再次检查我的代码。我清楚地将其发布,以便您理解我要说的内容谢谢
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;
}