C# 快速从datatable中删除在另一个datatable中找不到的行

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

这里我有两个数据表dtPartMaster([Part Number Exported])和dtPartBackUp([Part Number Backup],[weight]) 现在,我想删除dtPartBackUp中的行,而dtPartMaster中不存在[part Number Backup]([part Number Exported]) 我的逻辑是这样的,但处理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

试试这个(未测试)

这将返回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;

        }