2010-08-29 47 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