日期:2014-05-17  浏览次数:20936 次

关于两个DataTable数据过滤的问题
我有两个数据结构一样的两个DataTable(dt1、dt2),dt1有49000多条数据,dt2有47000多条数据,现在想将dt1中已存在于dt2的数据剔除掉,我写了个方法,耗时4分钟~5分钟,这样正常吗?我之前测试过是30秒左右就可以过滤完的了,不知道为什么现在时间变长了。

我的方法如下:
C# code

foreach (DataRow dr1 in dt1.Rows)
{
    foreach (DataRow dr2 in dt2.Rows)
    {
         if (dr1["id"].ToString() == dr2["id"].ToString())
         {
              dr1.Delete();
              dr2.Delete();
              break;
          }
     }
 }

dt.AcceptChanges();//




以上是我的方法,请问是我的方法问题导致速度慢吗?还是接近5w条数据的对比耗时就是要这么久吗??

麻烦各位帮忙看下!!!能否再缩短一下时间,我之前测试过好几次都是30多秒就完成的了,现在却变得这么慢

------解决方案--------------------
dt2.AsEnumerable().Except(dt1.AsEnumerable())
------解决方案--------------------
C# code

 DataTable dt1 = new DataTable();
 DataTable dt2 = new DataTable(); 
var dt3 = from r in dt1.AsEnumerable() where
 !( from rr in dt2.AsEnumerable() select rr.Field<int>("Id") ).Contains(
   r.Field<int>("Id")) select r;

------解决方案--------------------
探讨
dt2.AsEnumerable().Except(dt1.AsEnumerable())