2013-07-19 17 views
0

我有兩個DataTable兩列Table。現在,我想比較這兩個DataTable和C#中第三個DataTable中的匹配行。如何比較兩個Datatable並在C#中的其他DataTable中獲取通用記錄?

如:

DataTableA 
ColA1 ColA2 
1  sampletext1 
2  sampletext2 
4  sampletext4 

DataTableB 
ColB1 ColB2 
1  sampletext1 
2  sampletext2 
3  sampletext3 

DataTableC 
ColC1 ColC2 
1  sampletext1 
2  sampletext2 

我已經嘗試過使用循環,但它會減慢。任何其他的選擇。

+1

您的匹配標準是什麼?另外,您可能想要發佈現有的代碼以進行循環。 –

+0

它與Linq-to-Entities有什麼關係? 'DataTable'是一個內存中的對象。 –

+0

hello @Jakub Konecki,tableA中的兩列都與tableB中的兩列匹配,如果匹配,則獲取第三個數據表中的行。 –

回答

0
for(i=0;i<dt1.rows.count;i++) 
{ 
    if (dt2.rows.count > i) 
    { 
     if((dt1.rows[i][1] == dt2.rows[i][1]) && (dt1.rows[i][2] == dt2.rows[i][2])) 
      { 
       dt3.rows.add(dt.rows[i]) 
      } 

    } 
} 
0

首先使用合併功能合併兩個數據表,並finnaly對數據表環和找到選擇功能的結果是:

dt1 = dt.Copy(); 
dt1.Merge(dt2); 

//Here match condition third Data table 
for(int i=0; i <=dt1.rows; i++) 
{ 
    DataRow[] foundRows = dt3.Select("page_name='" + dt1.[i]['colname'] + "'"); 
    //function or code here; 
} 
2

不知道確切的匹配標準是什麼。下面的 可能會有幫助。

指像下面this

public static DataTable CompareTwoDataTable(DataTable dt1, DataTable dt2) 
{ 
    dt1.Merge(dt2); 
    DataTable d3 = dt2.GetChanges(); 
    return d3; 
} 
+1

哇這是一個偉大的和短的解決方案。雖然很古老的問題,如果你可以幫助我一樣的事情,但我必須比較的兩個DataTable沒有相同的號碼。列。 –

1

使用。它會更快地工作

var matched = from table1 in dt1.AsEnumerable() 
         join table2 in dt2.AsEnumerable() on table1.Field<string>("sno") equals table2.Field<string>("sno") 
         where table1.Field<string>("name") == table2.Field<string>("name") 
         select table1; 
     if (matched.Count()>0) 
     { 
      DataTable dtt = matched.CopyToDataTable(); 
     } 

如果有幫助,不要忘記提及答案。

+0

這將如何工作更快?比什麼更快?你是如何測試性能的? –

相關問題