码迷,mamicode.com
首页 > Windows程序 > 详细

C# DataRow 比较

时间:2015-10-10 08:00:30      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:c#   datarow   比较   

        /// <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);
            //重置DBNull 应为DBNull无法序列化
            ResetColumnCellValue(drA);
            ResetColumnCellValue(drB);
            //填充list 只填充需要比较的列
            List<object> listA = GetNeedCompareData(drA, columnNames);
            List<object> listB = GetNeedCompareData(drB, columnNames);
            //深拷贝比较
            string strA = EntityClassXmlSerializer<List<object>>.ToXMLString(listA);
            string strB = EntityClassXmlSerializer<List<object>>.ToXMLString(listB);
            if (strA == strB)
            {
                flag = true;
            }
            return flag;
        }

        /// <summary>
        /// 从需要比较的列中获取数据填充list集合
        /// </summary>
        /// <param name="dr"></param>
        /// <param name="columnNames"></param>
        /// <returns></returns>
        private static List<object> GetNeedCompareData(DataRow dr, string[] columnNames)
        {
            List<object> list = new List<object>();
            if (dr != null && columnNames != null)
            {
                foreach (string columnName in columnNames)
                {
                    if (dr.Table.Columns.Contains(columnName))
                    {
                        list.Add(dr[columnName]);
                    }
                    else
                    {
                        //list.Add(DBNull.Value);
                        list.Add(null);
                    }
                }
            }
            return list;
        }

        /// <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++;
                }
            }
        }

		
        /// <summary>
        /// 重置单元格的中DBNull为null
        /// </summary>
        /// <param name="dr"></param>
        private static void ResetColumnCellValue(DataRow dr)
        {
            foreach (DataColumn dc in dr.Table.Columns)
            {
                if (dr[dc.ColumnName] is DBNull)
                {
                    dr[dc.ColumnName] = null;
                }
            }

        }


深拷贝部分代码:

C# 实体类序列化与反序列化一 (XmlSerializer)


C# 实体类序列化与反序列化二 (DataContractSerializer)


版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

C# DataRow 比较

标签:c#   datarow   比较   

原文地址:http://blog.csdn.net/jiankunking/article/details/49004009

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!