2

这里我有两个数据表 dtPartMaster([Part Number Exported]) 和 dtPartBackUp([Part Number Backup],[weight]) 现在我想删除 dtPartBackUp 中 [part Number Backup] 在 dtPartMaster([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;

        }

提前感谢阿姆里特

4

2 回答 2

0

试试这个(未测试),

这应该根据 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();
于 2013-07-02T07:56:03.047 回答
0
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;

        }
于 2013-07-02T11:24:20.517 回答