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共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

时间: 2024-08-06 11:22:53

C# DataRow 比较的相关文章

DataRow[]转换DataTable

public DataTable ToDataTable(DataRow[] rows)    {        if (rows == null || rows.Length == 0) return null;        DataTable tmp = rows[0].Table.Clone();  // 复制DataRow的表结构        foreach (DataRow row in rows)            tmp.Rows.Add(row);  // 将DataRo

DataRow数组转换DataTable

public DataTable ToDataTable(DataRow[] rows) { if (rows == null || rows.Length == 0) return null; DataTable tmp = rows[0].Table.Clone(); // 复制DataRow的表结构 foreach (DataRow row in rows) tmp.Rows.Add(row.ItemArray); // 将DataRow添加到DataTable中 return tmp;

DataTable查询出DataRow数据

代码如下: DataTable dt = new DataTable(); DataColumn dc1 = new DataColumn("Id", typeof(string)); DataColumn dc2 = new DataColumn("Name", typeof(string)); dt.Columns.Add(dc1); dt.Columns.Add(dc2); DataRow dr = dt.NewRow(); dr["Id"

DataSet、DataTable、DataRow、DataColumn区别及使用实例

DataSet 表示数据在内存中的缓存. 属性 Tables  获取包含在 DataSet 中的表的集合. ds.Tables["sjxx"] DataTable 表示内存中数据的一个表. 公共属性 Columns 获取属于该表的列的集合. DataSet 获取此表所属的 DataSet. DefaultView 获取可能包括筛选视图或游标位置的表的自定义视图. PrimaryKey 获取或设置充当数据表主键的列的数组. Rows 获取属于该表的行的集合. TableName 获取或设

DataRow专为实体

把包含 对象 数据的DataRow转换成 实体对象(泛型反射方式) public static T Row2Model<T>(DataRow dr) where T : new() { T model = new T(); foreach (PropertyInfo p in (typeof(T)).GetProperties()) { if (dr[p.Name] is System.DBNull) { break; } p.SetValue(model, dr[p.Name], null)

用反射,将DataRow行转为Object对象

/// <summary> /// 反射辅助类 /// </summary> public class ReflectionHelper { /// <summary> /// 获取类型 /// </summary> /// <param name="typeAndAssName"></param> /// <returns></returns> public static Type Get

(转)DataRow的各种状态和DataView的两种过滤属性

DataRow的各种状态 http://www.cnblogs.com/zxjyuan/archive/2008/08/20/1271987.html 一个DataRow对象刚被创建之后(DataTable.NewRow())其状态是Detached,是孤立的一个存在. 所以建立了DataRow之后在DataRow中的单元填充了数据后还要通过DataTable.Rows.Add(DataRow)方法将此DataRow添加到DataTable,DataRow添加到DataTable后, 这个Dat

DataSet - DataTable - DataRow 读取 xml 文件 + 搜索

DataSet ds = XmlHelper.GetDataSetByXml(AppDomain.CurrentDomain.BaseDirectory + "/Config/ConfigName.xml");//取得xml文件 DataTable dt = ds.Tables["table_Name"];//取得xml文件的节点内容 DataRow[] dr = dr = ds.Tables["table_Name"].Select("

自动从DataRow里取数据给属性赋值

public abstract class ModelsBase     { //自动从DataRow里取数据给属性赋值 public void RightDataFrom(DataRow row) { Type type = this.GetType(); //遍历每一个属性 foreach (PropertyInfo prop in type.GetProperties()) { //判断是否可写入 if (prop.CanWrite == false) continue; //判断Data

How to use dt.Rows.Cast&lt;System.Data.DataRow&gt;().Take(n)

参考文章:http://stackoverflow.com/questions/2787458/how-to-select-top-n-rows-from-a-datatable-dataview-in-asp-net DataTable dtPage = dt.Rows.Cast<System.Data.DataRow>().Skip(pageSize * (page - 1)).Take(pageSize).CopyToDataTable();