2015-03-19 43 views
0

我有兩個數據表Datatable1和Datatable2。 Datatable1是另一個的子集。我想知道哪些行是新的,哪些是匹配的,哪些是不匹配的。想要在Datatable1中添加新行,並添加值 - 新建,匹配和不匹配。請建議一個優化的方式來做到這一點。在C#中比較兩個數據表並查找新的,匹配和非管理記錄

例如: Datatable1:

DataTable table = new DataTable(); 
table.Columns.Add("ID", typeof(int)); 
table.Columns.Add("Name1", typeof(string)); 
table.Columns.Add("Name2", typeof(string)); 
//New 
table.Rows.Add(25, "Ciya", "David"); 
table.Rows.Add(51, "Kiya", "Cecil"); 
//Matching 
table.Rows.Add(50, "Bina", "Cecil"); 
//Non matching 
table.Rows.Add(21, "Riya", "Janet"); 
table.Rows.Add(10, "Rita", "Christoff"); 

Datatable2:

DataTable table = new DataTable(); 
table.Columns.Add("ID", typeof(int)); 
table.Columns.Add("Name1", typeof(string)); 
table.Columns.Add("Name2", typeof(string)); 

table.Rows.Add(10, "Lisa", "Christoff"); 
table.Rows.Add(21, "Combivent", "Janet"); 
table.Rows.Add(50, "Bina", "Cecil"); 
+1

看一看的[ 「相關」(http://stackoverflow.com/questions/164144/compare-two-datatables-to-determine-rows-in-one-but-not-the - 其他)本頁右側的問題列表。你會發現不同的答案,爲你提供嘗試(同時學習)的機會。 一旦你嘗試了,並有一個更具體的問題,然後回來問,如果你自己找不到任何答案。 – 2015-03-19 06:35:13

回答

1

您可以使用LINQ的方法,其可用於可枚舉類型,如IntersectExcept嘗試。這是做這個的一個例子。

// Get matching rows from the two tables 
IEnumerable<DataRow> matchingRows = table1.AsEnumerable().Intersect(table2.AsEnumerable()); 

// Get rows those are present in table2 but not in table1 
IEnumerable<DataRow> rowsNotInTableA = table2.AsEnumerable().Except(table1.AsEnumerable()); 
+0

這將參考比較行而不是他們的內容。 – Magnus 2015-03-19 08:24:48

+0

嗨,感謝您的答案,但是當我使用Intersect時,IEnumerable返回空。 – Learner 2015-03-19 09:04:44

相關問題