C# DataRow の比較

黄舟
黄舟オリジナル
2018-05-15 11:15:252892ブラウズ

<pre class="brush:php;toolbar:false;">  /// <summary>
        /// dataRow比较
        /// </summary>
        /// <param name="drA"></param>
        /// <param name="drB"></param>
        /// <param name="columnNames">需要比较的列名称</param>
        /// <returns></returns>
        public static bool DataRowCompare(DataRow drA, DataRow drB, string[] columnNames)
        {
            bool flag = false;
            //DataRow 中需要比较的列排序
            ColumnSort(drA, columnNames);
            ColumnSort(drB, columnNames);
            foreach (DataColumn dcA in drA.Table.Columns)
            {
                if (columnNames.Contains(dcA.ColumnName))
                {
                    foreach (DataColumn dcB in drB.Table.Columns)
                    {
                        if (columnNames.Contains(dcB.ColumnName))
                        {
                            if (dcB.ColumnName == dcA.ColumnName)//列名比较
                            {
                                //类型比较
                                if (dcB.DataType != dcA.DataType)
                                {
                                    flag = false;
                                    break;
                                }
                                //值比较
                                else if (CompareObject(drA[dcB.ColumnName], drB[dcB.ColumnName]))
                                {
                                    flag = true;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            return flag;
        }
		     /// <summary>
        /// 按照数组中列名顺序排序
        /// </summary>
        /// <param name="drA"></param>
        /// <param name="columnNames">按照数组中列名顺序排序</param>
        public static void ColumnSort(DataRow drA, string[] columnNames)
        {
            //drA 排序
            int i = 0;
            foreach (string columnName in columnNames)
            {
                if (drA.Table.Columns.Contains(columnName))
                {
                    drA.Table.Columns[columnName].SetOrdinal(i);
                    i++;
                }
            }
        }


オブジェクト比較メソッド CompareObject(object objA, object objB):

C# オブジェクト比較 (値型、参照型)

コードのディープコピー部分:

C# エンティティクラスのシリアル化と逆シリアル化 1 (XmlSerializer)

C# エンティティクラスのシリアル化と逆シリアル化 2 (DataContractSerializer)

上記は C# DataRow の比較の内容です。さらに関連する内容については、PHP に注目してください。チャイニーズネット (www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。