2010-08-29 49 views
1

我有一个Datatable具有多个列和行,但我的焦点只在电子邮件地址列上。我也有一个电子邮件地址ArrayList。我需要遍历并比较ArrayList中的电子邮件地址和Datatable,并将它们从数据表中删除,前提是它们两个都包含相同的电子邮件地址,或者创建不包含这些电子邮件地址的新Datatable或ArrayList。这怎么可以在C#中完成?比较Datatable和ArrayList并删除C#中的值

+2

什么版本的.NET? .NET 1.1,因为你仍然在使用ArrayList? – 2010-08-29 03:02:43

+0

请发布您迄今为止编写的代码。人们通常不喜欢只为你写代码。 – 2010-08-29 03:20:12

+0

我所拥有的只是一个填充的ArrayList和一个填充的Datatable。我打算写一个Do While循环,我猜只要Datatable不为null,就会循环呢?在循环内,我会尝试将Datatable中的每个值与ArrayList中的每个值进行比较? – Josh 2010-08-30 12:06:42

回答

0

我认为ArrayList实现IEnumerable。 Datatable有一个asEnumerable(扩展?)方法。从那里你可以写一个linq查询。也许是一个“从datatable左连接arraylist选择哪里arraylist不是空”类型的查询。

好的,这可能是总的矫枉过正,但是自从我提起它之后,我会告诉你如何去做。

class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable dt = new DataTable("TestTable"); 
      dt.Columns.Add(new DataColumn("id",System.Type.GetType("System.Int32"))); 
      dt.Columns.Add(new DataColumn("email",System.Type.GetType("System.String"))); 

      ArrayList al = new ArrayList(); 
      al.Add("[email protected]"); 
      al.Add("[email protected]"); 
      al.Add("[email protected]"); 
      al.Add("[email protected]"); 


      DataRow r1 = dt.NewRow(); 
      r1["id"] = 1; 
      r1["email"] = "[email protected]"; 
      dt.Rows.Add(r1); 
      DataRow r2 = dt.NewRow(); 
      r2["id"] = 1; 
      r2["email"] = "[email protected]"; 
      dt.Rows.Add(r2); 
      DataRow r3 = dt.NewRow(); 
      r3["id"] = 1; 
      r3["email"] = "[email protected]"; 
      dt.Rows.Add(r3); 
      DataRow r4 = dt.NewRow(); 
      r4["id"] = 1; 
      r4["email"] = "[email protected]"; 
      dt.Rows.Add(r4); 
      DataRow r5 = dt.NewRow(); 
      r5["id"] = 1; 
      r5["email"] = "[email protected]"; 
      dt.Rows.Add(r5); 

      var query = from row in dt.AsEnumerable() 
         join String a in al on row.Field<String>("email") equals a into ljtable 
         from a in ljtable.DefaultIfEmpty() 
         where a != null 
         select new { Email = row.Field<String>("email"), Checker = a == null ? "null" : a }; 

      foreach (var v in query) 
      { 
       Console.WriteLine(String.Format("Email:{0} Left Join:{1}", v.Email, v.Checker)); 
      } 

      Console.ReadLine(); 
     } 
    } 
+0

嗨史蒂夫 - 我不熟悉Linq。我仍然对我如何循环访问数据表中的电子邮件地址值和Arraylist中的电子邮件地址值 – Josh 2010-08-30 13:16:22