程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 比較兩個DataTable是否相等(網上流傳的通病)

比較兩個DataTable是否相等(網上流傳的通病)

編輯:關於.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;
         }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved