/// <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; } } }
深拷贝部分代码:
版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
原文地址:http://blog.csdn.net/jiankunking/article/details/49004009