DTTable1 と DTTable2 などの 2 つのテーブルがあります。以下の記録があります。
DTTable1:
ItemID Specification Amount
--------- --------------- ---------
1 A 10
1 B 20
1 C 30
DTTable1:
ItemID Specification Amount
--------- --------------- ---------
1 A 10
1 B 20
1 C 30
2 A 10
2 B 20
3 A 10
3 B 20
ここで、これら 2 つの表を比較したいと思います。DTTable1 レコードが DTTable2 に存在する場合 (ItemID のみを考慮)、DTTable1 と同じ ItemID を持つ対応する行を削除します。
foreach と forloop を試しました。ForEach の使用:
foreach (DataRow DR in DTTable2.Rows)
{
if (DR["ItemID"].ToString() == DTTable1.Rows[0]["ItemID"].ToString())
{
DTTable2.Rows.Remove(DR);
}
}
DTTable2.AcceptChanges();
「コレクションが変更されました。列挙操作が実行されない可能性があります」というエラーが表示されました。そのため、Forループを使用しましたが、望ましい結果も得られませんでした。
For ループの使用:
for (int i = 0; i < DTTable2.Rows.Count; i++)
{
if (DTTable2.Rows[i]["ItemID"].ToString() == DTTable1.Rows[0]["ItemID"].ToString())
{
DTTable2.Rows.RemoveAt(i);
}
}
DTTable2.AcceptChanges();
ただし、2 番目の行がテーブルから削除されない場合があります。最終的なDataTableを次のように取得します
ItemID Specification Amount
--------- --------------- ---------
1 B 20
2 A 10
2 B 20
3 A 10
3 B 20
これを解決するには?これを行う最も簡単な方法は何ですか?