我寫這篇文章只是想告訴大家,網上流傳最廣的並不一定是正確的.
我想要是Google搜一下,如何判斷兩個DataTable相等,出來的最多的是下面的方法.
代碼
private bool ValueEquals(DataTable objA,DataTable objB)
{
if(objA != null && objB != null)
{
if(objA.Rows.Count != objB.Rows.Count)
{
return false;
}
if(objA.Columns.Count != objB.Columns.Count)
{
return false;
}
}
DataView dv = new DataView(objB);
string keys = "";
foreach(DataColumn col in objA.Columns)
{
keys += ","+col.ColumnName;
}
dv.Sort = keys.Substring(1);
foreach(DataRow row in objA.Rows)
{
if(row.RowState != DataRowState.Deleted)
{
if(dv.Find(row.ItemArray)<0)
{
return false;
}
}
else
{
return false;
}
}
return true;
}
這個段代碼的始作俑者已經無法考證了,但是卻流傳很多。
我不知道轉載的人有沒有去驗證一下這個方法的正確性,還是只是轉載.
這個方法其實是錯的。
如果兩個DataTable的行數一樣,列數一樣,但是第一行相同,第二行不相同,用上面的方法比較,返回的依然是True
寫在這裡是告訴廣大菜鳥(包括我在內),網上流傳最多的不一定是正確的,也想對廣大老鳥說一下,轉載的時候請驗證一下內容的正確性,我想這樣不管是對自己,對別人都是有好處的吧。
第一次發,如果說的不對的,希望大家不要建議.
也希望可以高手給出正確的、高效的,比較兩個DataTable是否相等的方法
我是用的比較老土的方法.
代碼
public bool DataTableTheSame(DataTable Table1, DataTable Table2)
{
if (Table1 == null || Table2 == null)
{
return false;
}
if (Table1.Rows.Count != Table2.Rows.Count)
{
return false;
}
if (Table1.Columns.Count != Table2.Columns.Count)
{
return 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())
{
return false;
}
}
}
return true;
}