/// <summary> /// Обновляет поступления ОСП. /// </summary> /// <param name="ospReceipts">Новый список поступлений</param> public void UpdateReceipts(IEnumerable <ReceiptDTO> ospReceipts) { // Если список не пустой. if (ospReceipts.Count() > 0) { // Получить новые объекты. ReceiptDTO[] added = ospReceipts.Except(Receipts, new ReceiptDTOComparer()).ToArray(); // Получить удаленные объекты ReceiptDTO[] removed = Receipts.Except(ospReceipts, new ReceiptDTOComparer()).ToArray(); // Получить существующие объекты. ReceiptDTO[] existing = Receipts.Intersect(ospReceipts, new ReceiptDTOComparer()).ToArray(); // Добавить в список новые объекты. if (added.Any()) { for (int i = 0; i < added.Count(); i++) { Receipts.Add(added[i]); } } // Убрать из списка удаленные объекты. if (removed.Any()) { for (int i = 0; i < removed.Count(); i++) { Receipts.Remove(removed[i]); } } // Обновить свойства существующим объектам. if (existing.Any()) { foreach (var exist in existing) { UpdateReceipt(exist); } } } // Если список новых пустой очистить список поступлений. else { Receipts.Clear(); } }