怎么快速比较两组数据的不同?

yanming2min 2013-07-30 05:51:41
从服务器和客户端同一个数据库表返回的数据,以服务器端的数据为主,怎么快速高效的判断两组数据有那些不同?
Ege:id、count、state
id相同,1、比较是否有新的id,2、已有的id数据是否相同

有高人指教吗?
...全文
622 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
自己实现比较器。参考一下:
public class RowEquality : IEqualityComparer<DataRow>
    {
        public bool Equals(DataRow x, DataRow y)
        {
            return x.Field<string>("ID") == y.Field<string>("ID");
        }

        public int GetHashCode(DataRow obj)
        {
            return obj == null ? 0 : obj.ToString().GetHashCode();
        }
		public static bool PropertyEqual(DataRow TTARow, DataRow DTERow)
        {
            return TTARow.Field<string>("COUNT") == DTERow.Field<string>("COUNT")
                   && TTARow.Field<string>("STATE") == DTERow.Field<string>("STATE");
        }
    }

//取差集	
IEnumerable<DataRow> Missing = Table1.AsEnumerable().Except(Table2.AsEnumerable(), new RowEquality());

//取交集
IEnumerable<DataRow> Intersect = Table1.AsEnumerable().Except(Table2.AsEnumerable(), new RowEquality());

if(交集不空)
{
 //遍历交集行
 Intersect.ToList().ForEach(row =>
 {
    //伪代码,自己实现
	var row1 = Table1.Select(id = row.id).FirstOrDefault();
	var row2 = Table2.Select(id = row.id).FirstOrDefault();
	
	if(!RowEquality.PropertyEqual(row1, row2))
	{
	  //属性不同
	  DoSomething...
	}
 }
}
ssa 2013-07-31
  • 打赏
  • 举报
回复
快速排序,实现排序接口
  • 打赏
  • 举报
回复
1.如果id是自增型,可比较MAX(id),聚合函数对主键的效率还是很高的 2.id相同,你可以在数据库中增加一个t_version字段表示版本戳(timestamp类型,相当于binary(8)),当数据发生改变(update)时,值便会改变,并且完全由数据库维护(尝试sql对其更改将报错) 你只需要查出来后比较id和这一个字段就行 where id=123 and t_version=XXX XXX由于是8个字节的二进制,程序中你可以与long或者ulong表示
devmiao 2013-07-30
  • 打赏
  • 举报
回复
服务器和客户端分别排序,然后逐条比较。
yanming2min 2013-07-30
  • 打赏
  • 举报
回复
顶上去,大侠们帮帮忙,想个办法!
yanming2min 2013-07-30
  • 打赏
  • 举报
回复
顶上去,大侠们帮帮忙,想个办法!
yanming2min 2013-07-30
  • 打赏
  • 举报
回复
引用 1 楼 liu_ben_qian 的回复:
先把一个数组放入Hashtable中,然后循环第二个数组比较是否在Hashtable中
大兄弟,这样的话还是得循环一个表里所有的数据,数据量很大的,逐条循环很麻烦啊!
wolf_ben 2013-07-30
  • 打赏
  • 举报
回复
先把一个数组放入Hashtable中,然后循环第二个数组比较是否在Hashtable中

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧