インターネット上で広く流布されていることが必ずしも正しいとは限らないということを皆さんにお伝えしたいと思います。
2 つの DataTable が等しいかどうかを判断する方法について Google で検索したいのですが、最もよく出てくるのは次の方法です。
コード
private bool ValueEquals(DataTable objA,DataTable objB)
{
if(objA != null && objB != null)
{
if(objA.Rows.Count != objB.Rows.Count)
{
false を返します。
}
if(objA.Columns.Count != objB.Columns.Count)
{
false を返します。
}
}
DataView dv = 新しい DataView(objB);
文字列キー = "";
foreach(objA.Columns の DataColumn 列)
{
キー += ","+col.ColumnName;
}
dv.Sort = キー.サブストリング(1);
foreach(objA.Rows の DataRow 行)
{
if(row.RowState != DataRowState.Deleted)
{
if(dv.Find(row.ItemArray)<0)
{
false を返します。
}
}
それ以外
{
false を返します。
}
}
true を返します。
}
このコードの作成者は確認できませんが、多くの噂があります。
転載した人がこの方法の正しさを検証したのか、それともただ転載しただけなのかはわかりません。
実はこの方法は間違っています。
2 つの DataTable の行数と列数が同じでも、最初の行が同じで 2 番目の行が異なる場合でも、上記の比較メソッドは True を返します。
私を含めて大多数の人に、ネット上で流布されている内容が必ずしも正しいとは限らないことを伝えたいのでここに書きます。転載する際は内容が正しいかどうかを確認してください。何があっても自分にとって良いことですし、他の人にとっても良いことです。
初めて投稿するので、もし私の言うことが間違っていたら、それを提案しないでください。
また、専門家が 2 つの DataTable が等しいかどうかを比較するための正しく効率的な方法を提供してくれることを願っています。
私はもっと昔ながらの方法を使いました
コード
public bool DataTableTheSame(DataTable Table1, DataTable Table2)
{
if (テーブル 1 == null || テーブル 2 == null)
{
false を返します。
}
if (Table1.Rows.Count != Table2.Rows.Count)
{
false を返します。
}
if (Table1.Columns.Count != Table2.Columns.Count)
{
false を返します。
}
for (int i = 0; i < Table1.Rows.Count; i++)
{
for (int j = 0; j < Table1.Columns.Count; j++)
{
if (Table1.Rows[i][j].ToString() != Table2.Rows[i][j].ToString())
{
false を返します。
}
}
}
true を返します。
}