protected Presentation Merge(UserIdentity identity, PresentationInfo presentationInfo, Slide[] newSlideArr, Presentation presentationStored, out LockingInfo[] lockedSlides, out Slide[] slideAlreadyExists) { IEnumerable<Slide> existedSlides = presentationStored.SlideList.Where( sl => newSlideArr.Any(newsl=>newsl.Id == sl.Id)); if (existedSlides.Count() != 0) { slideAlreadyExists = existedSlides.ToArray(); lockedSlides = new LockingInfo[] {}; return null; } foreach (Slide slide in newSlideArr) { //Slide slideStored = presentationStored.SlideList.Find( // sl => sl.Id == slide.Id); //if (slideStored != null) return null; slide.State = SlideState.Normal; presentationStored.SlideList.Add(slide); } // анализ удаленных слайдов List<Slide> slideListDeleted = presentationStored.SlideList.FindAll( sl => !presentationInfo.SlideInfoList.Exists(sli => sli.Id == sl.Id)); if (!IsStandAlone) { IEnumerable<LockingInfo> lockedSl = slideListDeleted.Select( sl => _lockService.GetLockInfo(ObjectKeyCreator.CreateSlideKey(presentationInfo.UniqueName, sl.Id))).Where( li=>li != null); if (lockedSl.Count() != 0) { lockedSlides = lockedSl.ToArray(); slideAlreadyExists = new Slide[] {}; return null; } } // удаляем слайды presentationStored.SlideList.RemoveAll(slideListDeleted.Contains); presentationStored.SavePresentationLevelChanges(presentationInfo); slideAlreadyExists = new Slide[] { }; lockedSlides = new LockingInfo[] { }; return presentationStored; }