Esempio n. 1
0
        private static void CompareEnumarableItemObject(IEnumerable sourceObject, IEnumerable targetObject,
                                                        ObjectCompareResultCollection updated, ObjectCompareResultCollection addOrDeleted,
                                                        Func <ObjectCompareInfo, object, object, ObjectCompareResult> createItemResult)
        {
            if (sourceObject != null)
            {
                foreach (object sourceValue in sourceObject)
                {
                    if (sourceValue != null)
                    {
                        ObjectCompareInfo compareInfo = sourceValue.GetType().GetCompareInfo();

                        string[] compareKeyFields = compareInfo.GetCompareKeyFields();

                        object targetValue = targetObject.FirstOrDefault <object>(t => IsSameCompareKey(compareInfo.GetCompareKeyFields(), sourceValue, t));

                        ObjectCompareResult itemResult = createItemResult(compareInfo, sourceValue, targetValue);

                        if (itemResult.AreDifferent)
                        {
                            ObjectCompareResultCollection resultCollection = GetCollectionByCompareValues(sourceValue, targetValue, updated, addOrDeleted);

                            if (resultCollection != null)
                            {
                                resultCollection.Add(itemResult);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sourceObject"></param>
        /// <param name="compareObject"></param>
        /// <returns></returns>
        public static ObjectCompareResult CompareObject(object sourceObject, object compareObject)
        {
            ObjectCompareInfo compareInfo = GetCompareInfo(sourceObject, compareObject);

            ObjectCompareResult result = null;

            if (compareInfo == null)
            {
                result = new ObjectCompareResult();
            }
            else
            {
                result = CompareObject(compareInfo, sourceObject, compareObject);
            }

            return(result);
        }
Esempio n. 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="compareInfo"></param>
        /// <param name="sourceObject"></param>
        /// <param name="targetObject"></param>
        /// <returns></returns>
        public static ObjectCompareResult CompareObject(ObjectCompareInfo compareInfo, object sourceObject, object targetObject)
        {
            compareInfo.NullCheck("compareInfo");

            ObjectCompareResult result = new ObjectCompareResult(compareInfo.ObjectTypeName);

            //如果是同一个对象,则直接返回
            if (object.ReferenceEquals(sourceObject, targetObject))
            {
                return(result);
            }

            foreach (PropertyCompareInfo pci in compareInfo.Properties)
            {
                object sourceValue = GetPropertyValue(sourceObject, pci.PropertyName);
                object targetValue = GetPropertyValue(targetObject, pci.PropertyName);

                if (object.Equals(sourceValue, targetValue) == false)
                {
                    ObjectPropertyCompareResult item = new ObjectPropertyCompareResult(pci, sourceValue, targetValue);

                    if (sourceValue.IsEnumerableObject() || targetValue.IsEnumerableObject())
                    {
                        item.SubObjectCompareResult = CompareEnumerableObject(sourceValue as IEnumerable, targetValue as IEnumerable);
                    }
                    else
                    {
                        item.SubObjectCompareResult = CompareObject(sourceValue, targetValue);
                    }

                    result.Add(item);
                }
            }

            result.Sort((r1, r2) => r1.SortID - r2.SortID);

            return(result);
        }