2017-06-26 61 views
0

table1的如何比較兩列在不同的數據表

id | fileName | fileDateTime 
1 | somefile | somedatetime 
2 | somefile2 | somedatetime2 

表2

id | fileName | fileDateTime 
    | somefile1 | somedatetime1 
    | somefile2 | somedatetime2 

(僅2 & 3列)輸出表3

id | fileName | fileDatetime 
    | somefile1 | somedatetime1 

我要比較的2個表並且只有兩個表中不存在的內容,第二個表中沒有ID字段。然後我打算解析文件中的數據,並將文件信息添加到數據庫以記錄文件已解析。我無法比較兩個字段。這似乎並不奏效。

for (int i = 0; i < finalTable.Rows.Count; i++) 
{ 
    for (int r = 0; r < filesTable.Rows.Count; i++) 
    { 
     if (finalTable.Rows[i][2] == filesTable.Rows[r][2]) 
     { 
      finalTable.Rows.Remove(finalTable.Rows[i]); 
     } 
    } 
} 

回答

0

假設值是一個字符串,你可以只是做

for (int i = 0; i < finalTable.Rows.Count; i++) 
{ 
    for (int r = 0; r < filesTable.Rows.Count; i++) 
    { 
     if (finalTable.Rows[r].Field<string>(2) == filesTable.Rows[r].Field<string>(2)) 
     { 
      finalTable.Rows.Remove(finalTable.Rows[i]); 
     } 
    } 
} 

如果它是另一種類型的,只是改變了<string>爲真正的類型!

0

您可以使用Linq來實現它,如下所示。

假設您的字段是字符串。對於其他數據類型,您可以相應地施放它們:

using System.Data.Linq; 
...... 
...... 
// Merge both tables data and group them by comparing columns values 
dt1.Merge(dt2); 
var g = dt1.AsEnumerable() 
     .GroupBy(x => x[0]?.ToString() + x[1]?.ToString()) // You can build Unique key here, I used string concatination 
     .ToDictionary(x => x.Key, y => y.ToList()); 

var unique = dt1.Clone(); 

foreach (var e in g) 
{ 
    if (e.Value.Count() == 1) // In either table - Intersaction 
    { 
     e.Value.CopyToDataTable(unique, LoadOption.OverwriteChanges); 
    } 

    if (e.Value.Count() == 2) 
    { 
     // In both tables -Union 
    } 
} 
相關問題