对比两个DataTable是否相同的正确方法_[Asp.Net教程] 要是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; }
|