2013-02-28 33 views
1

DataSet oDs = new DataSet(); DataTable odt = new DataTable();比較2行數據表中的行的唯一組合並查找它們是否使用LINQ相同

 odt.Columns.Add(new DataColumn("FILE_ID", typeof(string))); 
     odt.Columns.Add(new DataColumn("ID", typeof(string))); 
     oDs.Tables.Add(odt); 
     oDs.AcceptChanges(); 

     for (int i = 1; i < 3; i++) 
     { 
      DataRow oDr = oDs.Tables[0].NewRow(); 
      oDr["FILE_ID"] = "a" + i; 
      oDr["ID"] = "b" + i; 
      oDs.Tables[0].Rows.Add(oDr); 
     } 
     for (int i = 1; i < 3; i++) 
     { 
      DataRow oDr = oDs.Tables[0].NewRow(); 
      oDr["FILE_ID"] = "c" + i; 
      oDr["ID"] = "d" + i; 
      oDs.Tables[0].Rows.Add(oDr); 
     } 
     oDs.AcceptChanges(); 

     DataTable odt1 = new DataTable(); 

     odt1.Columns.Add(new DataColumn("FILE_ID", typeof(string))); 
     odt1.Columns.Add(new DataColumn("ID", typeof(string))); 
     oDs.Tables.Add(odt1); 
     oDs.AcceptChanges(); 

     for (int i = 1; i < 3; i++) 
     { 
      DataRow oDr = oDs.Tables[1].NewRow(); 
      oDr["FILE_ID"] = "a" + i; 
      oDr["ID"] = "b" + i; 
      oDs.Tables[1].Rows.Add(oDr); 
     } 
     for (int i = 1; i < 3; i++) 
     { 
      DataRow oDr = oDs.Tables[1].NewRow(); 
      oDr["FILE_ID"] = "c" + i; 
      oDr["ID"] = "d" + i; 
      oDs.Tables[1].Rows.Add(oDr); 
     } 
     oDs.AcceptChanges(); 

我需要一個LINQ查詢的,我可以找到,如果行(FILE_ID + ID)的值的組合是唯一&,如果他們在這兩個數據表

+0

你有2個表格。每個都有多行。因此,對於給定的表,您想要concatonate行值(FILE_ID + ID)並將其與該表的其他行進行比較以確定是否所有結果都是唯一的?此外,你想確保兩個表具有相同的內容? – 2013-02-28 16:32:56

+0

我不想連接兩行,但行中值的組合必須是唯一的,並確保兩個表具有相同的行組合 – shiju87 2013-02-28 16:38:00

回答

0

這得到了相同的你非唯一值:

var notUnique = odt.AsEnumerable() 
          .GroupBy(x => (string) x["FILE_ID"] + x["ID"]) 
          .Where(g => g.Count() > 1); 

發現是在一個表中,但沒有其他可以在這裏找到 Compares

0123的值

你的具體情況是這樣的:

var differentRows = 
      odt.AsEnumerable().Where(
       o => 
       odt1.AsEnumerable().All(
        o1 => ((string) o["FILE_ID"] + o["ID"]) != ((string) o1["FILE_ID"] + o1["ID"]))) 
       .Union(odt1.AsEnumerable().Where(
       o1 => odt.AsEnumerable().All(o => ((string)o["FILE_ID"] + o["ID"]) != ((string)o1["FILE_ID"] + o1["ID"])))); 

請記住,這好比是「除」方法,其中重複的記錄不會標榜自己的不同。但是,既然你正在檢查上面的模糊,我會認爲不需要進一步的檢查。

+0

此查詢是正確的,直到任何列中沒有DBNull值。如果無意中有任何DBNULL.Value出現在任何DataTable中,則會出現問題。 – shiju87 2013-03-01 04:55:17

相關問題