Beispiel #1
0
        public async Task <WorkItemCollection> GetData(ISet <int> workItemIds, ISet <WorkItemType> workItemTypes, bool includeFinishedWorkItems)
        {
            var result = await _client.GetData(workItemIds, workItemTypes, includeFinishedWorkItems);

            while (true)
            {
                var ids = result.WorkItems.Select(x => x.Id).ToList();

                workItemIds = result.Links
                              .SelectMany(x => new[] { x.FromWorkItemId, x.ToWorkItemId })
                              .Where(x => ids.Contains(x) == false)
                              .ToSet();

                if (workItemIds.Any() == false)
                {
                    break;
                }

                var response = await _client.GetData(workItemIds, workItemTypes, includeFinishedWorkItems);

                response.Links.ForEach(x => result.Links.Add(x));
                response.WorkItems.ForEach(x => result.WorkItems.Add(x));
            }

            return(result);
        }
        public async Task <WorkItemCollection> GetData(ISet <int> workItemIds, ISet <WorkItemType> workItemTypes, bool includeFinishedWorkItems)
        {
            var fromWorkItemIds = workItemIds.ToSet();
            var toWorkItemIds   = workItemIds.ToSet();

            var result = new WorkItemCollection();

            while (true)
            {
                workItemIds = fromWorkItemIds
                              .Concat(toWorkItemIds)
                              .Except(result.WorkItems.Select(x => x.Id))
                              .ToSet();

                if (workItemIds.Any() == false)
                {
                    break;
                }

                var response = await _client.GetData(workItemIds, workItemTypes, includeFinishedWorkItems);

                response.WorkItems.ForEach(x => result.WorkItems.Add(x));

                fromWorkItemIds = response.Links
                                  .Where(x => fromWorkItemIds.Contains(x.FromWorkItemId))
                                  .Visit(x => result.Links.Add(x))
                                  .Select(x => x.ToWorkItemId)
                                  .ToSet();

                toWorkItemIds = response.Links
                                .Where(x => toWorkItemIds.Contains(x.ToWorkItemId))
                                .Visit(x => result.Links.Add(x))
                                .Select(x => x.FromWorkItemId)
                                .ToSet();
            }

            return(result);
        }