public static async Task <RelatedDataGraph> FromDirty(IEnumerable <CommonData> objects) { var graph = new RelatedDataGraph(); var dataCache = new List <CommonData> (objects); var parentStack = new Stack <CommonData> (); var objectsStack = new Stack <IEnumerable <CommonData> > (); parentStack.Push(null); objectsStack.Push(dataCache.ToList()); CommonData parent; while (parentStack.Count > 0) { parent = parentStack.Pop(); objects = objectsStack.Pop() .Where((m) => m != null && (m.IsDirty || m.RemoteId == null || m.DeletedAt != null)); foreach (var dataObject in objects) { parentStack.Push(dataObject); objectsStack.Push(await GetRelatedData(dataObject, dataCache).ConfigureAwait(false)); graph.Add(dataObject, parent); } } return(graph); }
public static async Task<RelatedDataGraph> FromDirty (IEnumerable<CommonData> objects) { var graph = new RelatedDataGraph (); var dataCache = new List<CommonData> (objects); var parentStack = new Stack<CommonData> (); var objectsStack = new Stack<IEnumerable<CommonData>> (); parentStack.Push (null); objectsStack.Push (dataCache.ToList ()); CommonData parent; while (parentStack.Count > 0) { parent = parentStack.Pop (); objects = objectsStack.Pop () .Where ((m) => m != null && (m.IsDirty || m.RemoteId == null || m.DeletedAt != null)); foreach (var dataObject in objects) { parentStack.Push (dataObject); objectsStack.Push (await GetRelatedData (dataObject, dataCache).ConfigureAwait (false)); graph.Add (dataObject, parent); } } return graph; }