2016-09-30 3 views
0

以下のコードでは、データセットを比較し、違いがあるかどうかをチェックする2つのデータセットがあります。最初のデータセット内RowNoで2つのデータセットを比較する

  • 私は2つの他の定数列であるROWNO両方のデータセットでは3列EMPNAME、のEmpID、第二のデータセット内ROWNO
  • I 3列EMPNAME、のEmpIDを有する、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 

私はROWNOによってデータセット2とのデータセット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私はそれが簡単だと思ったので、私はそれを試してみました。 – user2432361

+0

これはあなたがやったこととほぼ同じですが、長引いています。 –

答えて

0

このようなものは、あなたがあなたの方法に

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

あなたを得るのを助ける必要がありますがここでは(私はそこに他の人も、多分単純必要があります確信している)、それを行う方法です。まず、2つのデータセットを1つにマージし、データを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; 
        } 
       } 
      } 
     } 
} 

最後に、行変更のリストが表示されます。それが役に立てば幸い。

+0

上記の例から、RowID 2と3は、データセット2の2と3でEmpIDが異なるため変更されました。 – user2432361

+0

はい...サンプルデータこのメソッドは、行番号2と3 @ user2432361を返します – Pikoh

関連する問題