private void GetYAxisValueDictionary(List <string> seriesNameList, List <MetricMeter> selectResult, AggregationWay aggregationWay, Dictionary <string, Series> dictionary) { foreach (string seriesName in seriesNameList) { // start: foreach (string seriesName in seriesNameList) if (!dictionary.ContainsKey(seriesName)) { dictionary.Add(seriesName, new Series() { Name = seriesName }); } double yAxisValue = 0; if (selectResult == null || selectResult.Count < 1) { dictionary[seriesName].YAxisValueList.Add(Math.Round(yAxisValue, 2)); continue; } // if(selectResult != null && selectResult.Count > 0): IEnumerable <MetricMeter> info = selectResult.Where <MetricMeter>(m => m.SeriesName == seriesName); if (info != null && info.Any()) { switch (aggregationWay) { case AggregationWay.COUNT: yAxisValue = info.Sum(y => y.YAxisValueForCOUNT); break; case AggregationWay.SUM: yAxisValue = info.Sum(y => y.YAxisValueForSUM); break; case AggregationWay.MAX: yAxisValue = info.Max(y => y.YAxisValueForMAX); break; case AggregationWay.MIN: yAxisValue = info.Min(y => y.YAxisValueForMIN); break; case AggregationWay.AVG: yAxisValue = info.Sum(y => y.YAxisValueForCOUNT); yAxisValue = yAxisValue == 0 ? yAxisValue : 1.00 * info.Sum(y => y.YAxisValueForSUM) / yAxisValue; break; } } dictionary[seriesName].YAxisValueList.Add(Math.Round(yAxisValue, 2)); } // end: foreach (string seriesName in seriesNameList) }
/// <summary> /// 聚合SeriesName数据 /// </summary> /// <param name="selectResult">所有记录数</param> /// <param name="seriesName"></param> /// <param name="aggregationWay">聚合方式</param> /// <returns>Result</returns> private double GetSeriesValue(List <MetricHistogram> selectResult, string seriesName, AggregationWay aggregationWay) { double num = 0; if (selectResult != null) { IEnumerable <MetricHistogram> enumInfo = selectResult.Where(m => m.SeriesName == seriesName); if (enumInfo != null && enumInfo.Any()) { switch (aggregationWay) { case AggregationWay.COUNT: num = enumInfo.Sum(y => y.ValueCount); break; case AggregationWay.SUM: num = enumInfo.Sum(y => y.ValueSum); break; case AggregationWay.MAX: num = enumInfo.Max(y => y.ValueMax); break; case AggregationWay.MIN: num = enumInfo.Min(y => y.ValueMin); break; case AggregationWay.AVG: num = enumInfo.Sum(y => y.ValueCount); num = num == 0 ? num : 1.00 * enumInfo.Sum(y => y.ValueSum) / num; break; } } } return(num); }