/// <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