您的位置:首页 > 其它

两个集合求差

2015-12-02 22:32 274 查看
需求:从两个不同历史版本的数据库提取出相同的表数据(多个表)进行差异对比。

实施:使用集合的Except扩展方法

过程:开始想的是写代码循环比较差异,但是代码写起来比较繁琐,后来发现集合有一个Except扩展方法正是用来实现求差集的。

部分代码如下

EnumerableRowCollection<HtRefInfo> hta;
EnumerableRowCollection<HtRefInfo> htb;
hta = DalA.LoadHt(ids);
htb = DalB.LoadHt(ids);
var only_a_has = hta.Except(htb, new HtDiffEquality());//a有,b没有的

//----------------------------------------------------------------------------

HtDiffEquality类里定义了两个集合的比较规则
public class HtDiffEquality : IEqualityComparer<HtRefInfo>
{
public bool Equals(HtRefInfo x, HtRefInfo y)
{
return (x.TableName == y.TableName && x.TableID == y.TableID && x.HtID == y.HtID);
}

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


注意:如果两个集合的数据比较多,程序会比较慢。我实际的数据两个集合都有10万条数据,执行了10几分钟(电脑8g内存,I5)

补充:除了except扩展方法,还有Intersect(求交集),Union(求并集)等。

后期:这个扩展内部大概还是用循环写的吧,以后有时间要看看源码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: