首页 新闻 会员 周边

c#比较器中的重写

0
悬赏园豆:80 [已解决问题] 解决于 2015-08-14 13:52

比较两个DataTable求取差值,为了保证目标表中的数据的真实性不能用默认的比较器,比较器应该怎样写,只要两个表中的时间字段和日期字段相同就不要该行

DataIEnumerable<DataRow> queryDatable = d_info.AsEnumerable().Except(dt.AsEnumerable(),new Comparer());
    public class Comparer : EqualityComparer<DataRow>
    {
        public override bool Equals(DataRow x, DataRow y)
        {
            if ((x["DataTime"].ToString() == y["DataTime"].ToString()) && (x["CDNO"].ToString() == y["CDNO"].ToString()))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override int GetHashCode(DataRow obj)
        {
            if (obj==null)
            {
                return 0;
            }
            else
            {
                return obj.ToString().GetHashCode();
            }
        }
    }

wwwzhang的主页 wwwzhang | 初学一级 | 园豆:37
提问于:2015-08-13 16:15
< >
分享
最佳答案
1

你是想得到第一个datatable里面与第2个datatable里面DataTime与CDNO不同的2列?你上面的代码比较出了什么问题

收获园豆:80
稳稳的河 | 老鸟四级 |园豆:4216 | 2015-08-13 16:43

结果出错

wwwzhang | 园豆:37 (初学一级) | 2015-08-13 16:45

@wwwzhang: 应该是第一列与第一列,第2列与第2列,这样去比较了

稳稳的河 | 园豆:4216 (老鸟四级) | 2015-08-13 16:47

@稳稳的河: 关键是不会

wwwzhang | 园豆:37 (初学一级) | 2015-08-13 16:49

@稳稳的河: DataTime与CDNO是两个索引,比较索引就知道dr11和dr2是不是相等

wwwzhang | 园豆:37 (初学一级) | 2015-08-13 16:52

@wwwzhang: 调试了下,OK了

 class Program
    {

        static void Main()
        {
           

            DataTable dt = new DataTable();

            dt.Columns.Add("DataTime", typeof(string));
            dt.Columns.Add("CDNO", typeof(string));

            for (int i = 0; i < 7; i++)
            {
                DataRow newRow;
                newRow = dt.NewRow();
                newRow["DataTime"] = i;
                newRow["CDNO"] = i;

                dt.Rows.Add(newRow);
            }

            DataTable dt1 = new DataTable();

            dt1.Columns.Add("DataTime", typeof(string));
            dt1.Columns.Add("CDNO", typeof(string));

            for (int i = 2; i < 5; i++)
            {
                DataRow newRow;
                newRow = dt1.NewRow();
                newRow["DataTime"] = i;
                newRow["CDNO"] = i;

                dt1.Rows.Add(newRow);
            }

            var queryDatable = dt.AsEnumerable().Except(dt1.AsEnumerable(), new Comparer());
            
        }
            public class Comparer : EqualityComparer<DataRow>
            {
            public override bool Equals(DataRow x, DataRow y)
            {
            if ((x["DataTime"].ToString() == y["DataTime"].ToString()) && (x["CDNO"].ToString() == y["CDNO"].ToString()))
            {
                return true;
            }
            else
            {
                return false;
            }
            }        
        public override int GetHashCode(DataRow obj)
        {
            if (obj==null)
            {
                return 0;
            }
            else
            {
                return obj.ToString().GetHashCode();
            }
        }
     }
稳稳的河 | 园豆:4216 (老鸟四级) | 2015-08-13 17:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册