2014-02-27 169 views
0

我已經編寫了一個程序來比較兩個數據表與唯一標識符,並創建另一個數據表以插入具有相同標識符的列。我已經在下面演示了我的要求。將兩個數據表與一個唯一的ID進行比較

這些是需要的表進行比較:

enter image description here

enter image description here

,我需要的輸出如下

enter image description here

但我收到一個空的表作爲結果。我無法理解我錯在哪裏。你能幫我解決這個問題嗎?我提供我的編碼。請到不是數量和投入是兩個DataTable

DataTable result = new DataTable(); 
result.Columns.AddRange(new DataColumn[2] { new DataColumn("id"), new DataColumn("qty") });   


      foreach (DataRow row1 in input.Rows) 
      { 
       foreach (DataRow row2 in quantity.Rows) 
       { 
        if (row1["id"].ToString() == row2["id"].ToString()) 
        { 
         result.ImportRow(row2); 
        } 
        else 
        { 
         result.ImportRow(row1); 
        } 
       } 
      } 

     return result; 
+0

使用LINQ與連接。 –

回答

4

您需要2的Left Join數據表。

 DataTable dtinput = new DataTable(); 
     DataTable dtquantity = new DataTable(); 

     dtinput.Columns.Add("id",typeof(int)); 
     dtinput.Rows.Add("2"); 
     dtinput.Rows.Add("4"); 
     dtinput.Rows.Add("7"); 

     dtquantity.Columns.Add("id", typeof(int)); 
     dtquantity.Columns.Add("qty", typeof(int)); 
     dtquantity.Rows.Add("1", "12"); 
     dtquantity.Rows.Add("2", "13"); 
     dtquantity.Rows.Add("3", "5"); 
     dtquantity.Rows.Add("4", "6"); 
     dtquantity.Rows.Add("7", null); 

     var results = from table1 in dtinput.AsEnumerable() 
         join table2 in dtquantity.AsEnumerable() 
         on (int)table1["id"] equals (int)table2["id"] 
         into outer 
         from row in outer.DefaultIfEmpty<DataRow>() 
         select row; 
     DataTable dt = results.CopyToDataTable(); 

此圖應該可以幫助你在未來:

enter image description here

+0

您好,非常感謝。但是,我怎麼能結合「var結果」到數據表?請幫忙 –

+0

謝謝,可以複製到datatable DataTable dt = results.CopyToDataTable()' – Sadique

+0

,但沒有選項叫做「CopyToDataTable」。原因是什麼? –

0

嘗試是這樣的:

var result = input.Rows.Where(x => quantity.Rows.Amy(y => x == y)); 

我希望這有助於!

相關問題