2016-09-30 112 views
0

在下面的代碼中,我有兩個數據集,我想比較數據集並檢查它是否有差異。按RowNo比較2數據集

  • 在第一數據集我有3列Empname,的EmpID,RowNo
  • 在第二數據集I有3列Empname,的EmpID,RowNo

在兩個數據集RowNo是另外兩個恆定的柱列是動態的,所以我想用下面的情形比較數據集:

Dataset1: 
    Empname,EmpID,RowNo 
    AAA  E1 1 
    BBB  E2 2 
    CCC  E3 3 

    Dataset 2: 

    Empname,EmpID,RowNo 
    AAA  E1 1 
    DDD  E4 4 
    EEE  E5 5 
    BBB  E8 2 
    CCC  E9 3 

我要與數據集2由RowNo因此,對比較數據集1比較,它應該返回RowNo 2A nd 3被修改。 所以任何人都請幫我做到這一點。

代碼:

for (int i=0; i < dataset1.Tables[0].Rows.Count; i++) 
{ 
    if (!(dataset1.Tables[0].Rows[i]["RowNo"] == dataset2.Tables[0].Rows[i]  ["RowNo"]) 
    { 
     return i; 
    } 
} 
+0

我的第一個問題是爲什麼你使用2個數據集而不是2個數據表? –

+0

@SimonPrice我認爲這很容易,所以我試過。如果Datatable如何比較它。 – user2432361

+0

這幾乎是你所做的,但一個漫長的囉嗦周圍。 –

回答

0

這樣的事情應該可以幫助你得到你對你的方式

dataset2.Tables[0].AsEnumerable().Where(x => x.Field<int>("RowNum") == i); 
0

這裏有一個辦法做到這一點(我敢肯定,必須有其他人,也許更簡單) 。首先,將兩個數據表合併成一個,然後用rowno對數據進行分組。之後,您只需按組比較數據行以檢查哪些被修改。類似這樣的:

DataTable dt3 = dt1.Copy(); 
dt3.Merge(dt2); 
var grouped=dt3.AsEnumerable().GroupBy(x => x.Field<int>("RowNo")); 

List<int> RowsModified = new List<int>(); 
foreach(var group in grouped) 
{ 
    if (group.Count() > 1) 
    { 
      DataRow dr = dt1.NewRow(); 

      foreach (var row in group) 
      { 
       if (dr["RowNo"] == DBNull.Value) 
       { 
        dr = row; 
       } 
       else 
       { 
        if (!dr.ItemArray.SequenceEqual(row.ItemArray)) 
        { 
         RowsModified.Add(group.Key); 
         break; 
        } 
       } 
      } 
     } 
} 

最後,在RowsMo​​dified中,您將得到一個行號列表。希望能幫助到你。

+0

從上面的例子RowNo 2和3被修改爲EmpID在數據集2中的2和3中不同 – user2432361

+0

是的......我用您的示例數據並且此方法返回行分子2和3 @ user2432361 – Pikoh