private Dictionary <string, double> GetTotalsPerField(WorkItem[] workItems)
        {
            var totalsPerField = new Dictionary <string, double>();

            NumericFieldDefinitions.ToList().ForEach(fd => totalsPerField.Add(fd.Name, 0));

            foreach (WorkItem workItem in workItems)
            {
                foreach (FieldDefinition fieldDefinition in NumericFieldDefinitions)
                {
                    if (!workItem.Fields.Contains(fieldDefinition.Name))
                    {
                        continue;
                    }

                    var fieldValue = workItem.Fields[fieldDefinition.Name].Value;

                    if (fieldValue is double)
                    {
                        totalsPerField[fieldDefinition.Name] += (double)fieldValue;
                    }
                }
            }

            return(totalsPerField);
        }
        public void RefreshWorkItems(IResultsDocument queryResultsDocument)
        {
            string    query   = queryResultsDocument.QueryDocument.QueryText;
            Hashtable context = GetTfsQueryParameters(queryResultsDocument);

            var tpc           = visualStudioAdapter.GetCurrent();
            var workItemStore = tpc.GetService <WorkItemStore>();

            var workItemQuery = new Query(workItemStore, query, context);

            NumericFieldDefinitions = GetNumericFieldDefinitions(workItemQuery);

            if (!NumericFieldDefinitions.Any())
            {
                CurrentWorkItems = new WorkItem[0];
                return;
            }

            WorkItemCollection workItemCollection = workItemStore.GetWorkItems(workItemQuery, NumericFieldDefinitions);

            WorkItem[] workItemsA = new WorkItem[workItemCollection.Count];
            ((ICollection)workItemCollection).CopyTo(workItemsA, 0);

            CurrentWorkItems = workItemsA;

            RefreshTotals((queryResultsDocument.SelectedItemIds ?? new int[0]));
        }