频道栏目
首页 > 程序开发 > 软件开发 > C# > 正文
C# DataRow 比较
2015-10-10 10:39:21         来源:衣舞晨风  
收藏   我要投稿
        /// 
        /// dataRow比较
        /// 
        ///
        ///
        ///需要比较的列
        /// 
        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 listA = GetNeedCompareData(drA, columnNames);
            List listB = GetNeedCompareData(drB, columnNames);
            //深拷贝比较
            string strA = EntityClassXmlSerializer>.ToXMLString(listA);
            string strB = EntityClassXmlSerializer>.ToXMLString(listB);
            if (strA == strB)
            {
                flag = true;
            }
            return flag;
        }

        /// 
        /// 从需要比较的列中获取数据填充list集合
        /// 
        ///
        ///
        /// 
        private static List GetNeedCompareData(DataRow dr, string[] columnNames)
        {
            List list = new List();
            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;
        }

        /// 
        /// 按照数组中列名顺序排序
        /// 
        ///
        ///按照数组中列名顺序排序
        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++;
                }
            }
        }

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

        }

 

 

点击复制链接 与好友分享!回本站首页
相关TAG标签
上一篇:C#学习日记17---显示类型转换具体用例
下一篇:C# 对象比较(值类型、引用类型)
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站