public MergeResult Merge(IEnumerable<SubscriptionItem> previousItems, IEnumerable<FeedItem> currentItems) { var result = new MergeResult(); var previousAuxList = new KeyedCollection<string, SubscriptionItem>(x => x.Id, previousItems); var currentAuxList = new KeyedCollection<string, FeedItem>(x => x.Id, currentItems); var previousIds = previousAuxList.Select(x => x.Id).ToArray(); foreach (var id in previousIds) { if (!currentAuxList.Contains(id)) ChooseRemovedItem(id, previousAuxList, result); else ChooseMergeItem(id, previousAuxList, currentAuxList, result); } var newIds = currentAuxList.Select(x => x.Id).ToArray(); foreach (var id in newIds) ChooseNewItem(id, currentAuxList, result); return result; }