日期:2014-05-17  浏览次数:20768 次

Collection 对比 怎么做?
我现在有两个集合 类型是相同的 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;
                    &n