Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
        }