public static CollectionChanges <T> CollectionChanges(IEnumerable <T> liveEntities, IEnumerable <T> storeEntities) { CollectionChanges <T> collectionChanges = new CollectionChanges <T>(); if (liveEntities != null && liveEntities.Count() > 0) { if (storeEntities != null && storeEntities.Count() > 0) { collectionChanges = CollectionChangesWhenThereAreRecords(liveEntities, storeEntities); } else { collectionChanges = new CollectionChanges <T> { Added = liveEntities.ToList() }; } } else if (storeEntities != null && storeEntities.Count() > 0) { if (liveEntities != null && liveEntities.Count() > 0) { collectionChanges = CollectionChangesWhenThereAreRecords(liveEntities, storeEntities); } else { collectionChanges = new CollectionChanges <T> { Deleted = storeEntities.ToList() }; } } return(collectionChanges); }
private static CollectionChanges <T> CollectionChangesWhenThereAreRecords(IEnumerable <T> liveEntities, IEnumerable <T> storeEntities) { List <T> addedEntities = liveEntities.Where(live => live.Id == 0).ToList(); List <T> removedEntities = storeEntities.Where(store => !liveEntities.Select(live => live.Id).Contains(store.Id)).ToList(); List <T> updatedEntities = (from live in liveEntities join store in storeEntities on live.Id equals store.Id where !live.Equals(store) select live).ToList(); CollectionChanges <T> collectionChanges = new CollectionChanges <T> { Added = addedEntities, Deleted = removedEntities, Updated = updatedEntities }; return(collectionChanges); }