Collection 对比 怎么做?

Robinfu2013 2013-03-12 08:46:23
我现在有两个集合 类型是相同的 xxxCollection. 现在能 集合ACollection是SQL数据库的,集合BCollection是Oracle数据的,我现在拿到这两个集合,SQL是主数据库而Oracle数据库是从数据库,他的数据都是从SQL里面采集的。
我现在怎样才能更快更有效的分辨出 ACollection和BCollection 那些是增加的,那些是删除,最难的是哪些是更新的?
批量增加删除更改都写好了方法,还是扔回Collection集合就可以了。中间这步该怎么做呢? 求大侠指点 小弟参考了如下文章,但是发现using System.Collections.ObjectModel; Collection里面没有Find方法.
 /// <summary>
/// 对比两个同类型的Collection<T>根据返回类型参数,返回差异Collection<T>集合
/// </summary>
/// <typeparam name="T">泛型类型</typeparam>
/// <param name="newCollection">修改后的新数据源</param>
/// <param name="oldCollection">原始数据源</param>
/// <param name="keyField">数据主键</param>
/// <param name="returnType">返回类型参数 0-新增加的数据 1-更新的数据 2-删除的数据 </param>
/// <returns></returns>
public Collection<T> GetDifferentCollections<T>(Collection<T> newCollection, Collection<T> oldCollection, string keyField, int returnType)
{
Collection<T> CollectionList = new Collection<T>();



//判断返回值类型
if (returnType == 0) //比较并获取新增的数据
{
foreach (T newCol in newCollection)
{
//取得新实体的数据主键值
object nob = newCol.GetType().GetProperty(keyField).GetValue(newCol, null);

T oldCol = oldCollection.Find((delegate(T old)
{
object ob = old.GetType().GetProperty(keyField).GetValue(old, null);

if (object.Equals(ob, nob))
return true;
else
return false;
}));
}
}
else if (returnType == 1) //比较并获取更新的数据
{

}
else if (returnType == 2) //比较并获取删除的数据
{

}


return CollectionList;
}


参考文章 http://www.cnblogs.com/lhxhappy/archive/2009/01/05/1368635.html
...全文
82 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
按你的搞法,你可以把oldCollection的主键单独拿出来放到一个集合中,比如HashSet或者List<int> 然后拿新对象的主键去查找,何必每次都查找对象再反射? 简单点,两个Collection都放到dt中,然后Merge
  • 打赏
  • 举报
回复
这个没有啥好办法吧。。 1.判断主数据库存在的,从数据不存在的就是增加的。 2.判断从数据库存在的,主数据库不存在的就是删除的。 3.如果表里有更新日期的字段的话。就判断主数据库的是不是比从数据的新。。。。
Robinfu2013 2013-03-15
  • 打赏
  • 举报
回复
这么久远了...

110,533

社区成员

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

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

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