2013-05-09 2 views
0

모델불규칙한 시간 데이터 목록의 날짜순으로 그룹화하고 날짜 평균을 얻으시겠습니까?

public class MeterReadingsBccChartData 
{ 
    public string BranchName { get; set; } 
    public string TypeName { get; set; } 
    public string Unit { get; set; } 
    public List<Tuple<DateTime, double>> DateAndValue { get; set; } 

    public MeterReadingsBccChartData(List<Tuple<DateTime, double>> dateAndValue, string typeName, string unit, string BranchName) 
    { 
     this.DateAndValue = dateAndValue; 
     this.TypeName = typeName; 
     this.Unit = unit; 
     this.BranchName = BranchName; 
    } 
} 

모델 투 chartSeries 코드 정보, 상기 방법

public static List<Series> GetBccChartData(IEnumerable<MeterReadingsBccChartData> meterReadings) 
{ 
    List<Series> series = new List<Series>(); 
    foreach (var item in meterReadings) 
    { 
     int lenght = item.DateAndValue.Count(); 
     object[,] data = new object[lenght, 2]; 
     for (int i = 0; i < lenght; i++) 
     { 
      data[i, 0] = item.DateAndValue[i].Item1; 
      data[i, 1] = item.DateAndValue[i].Item2; 
     } 
     Series localSeries = new Series { Name = item.BranchName + " " + item.TypeName + " " + item.Unit, Data = new Data(data), Type = ChartTypes.Column }; 
     series.Add(localSeries); 
    } 

    return series; 
} 

난 DB에서 데이터를 읽는다. 데이터 유형은 MeterReadingsBccChartData입니다. 그런 다음 데이터 유형을 Series으로 변환하고이 시리즈를 목록에 저장합니다. 이 목록에 평균 시리즈를 추가하고 싶습니다. 그러나 같은 날짜에 대한 데이터가 없을 수 있습니다. 예를 들어 내 데이터는 다음과 같습니다

Series AVG : { { date : 01.01.2013, value : 8 }, { date : 02.01.2013, value : 10 } { date : 03.01.2013, value : 3 } } 

내가 두 번째 DB 페칭으로이 작업을 수행 할 수 있습니다

Series 1 : { { date : 01.01.2013, value : 5 }, { date : 02.01.2013, value : 10 } } 
Series 2 : { { date : 01.01.2013, value : 11 }, { date : 03.01.2013, value : 3 } } 

는 내가 어떤 것을 다음과 같이 원하는이 시리즈의 평균을 계산합니다. 나는 날짜 사이 평균 값을 얻는다. 그래서 저는 db로부터 두 번 데이터를 얻습니다.

위 방법에서이 계열의 평균을 계산할 방법이 있습니까? 어떤 팁? 내가 설명 할 수 있기를 바랍니다

...

감사합니다 ...

답변

0

내 문제를 설명하지 못할 수 있음. 나는 해결책을 찾는다. 나는 이것이 최고라는 것을 모른다. 그러나 나는 db로부터 한 번에 데이터를 가져온다.

public static List<Series> GetBccChartData(IEnumerable<MeterReadingsBccChartData> meterReadings) 
{ 
    List<Tuple<DateTime, double>> allData = new List<Tuple<DateTime, double>>(); 
    List<Series> series = new List<Series>(); 
    foreach (var item in meterReadings) 
    { 
     int lenght = item.DateAndValue.Count(); 
     object[,] data = new object[lenght, 2]; 
     for (int i = 0; i < lenght; i++) 
     { 
      allData.Add(item.DateAndValue[i]); 
      data[i, 0] = item.DateAndValue[i].Item1; 
      data[i, 1] = item.DateAndValue[i].Item2; 
     } 
     Series localSeries = new Series { Name = item.BranchName + " " + item.TypeName + " " + item.Unit, Data = new Data(data), Type = ChartTypes.Column }; 
     series.Add(localSeries); 
    } 

    // ortalama serisi hesaplanıyor. 
    List<Tuple<DateTime, double>> averageData = allData.GroupBy(x => x.Item1).Select(x => Tuple.Create<DateTime, double>(x.Key, x.Average(item => item.Item2))).ToList(); 
    int avgDataLenght = averageData.Count(); 
    object[,] dataAvg = new object[avgDataLenght, 2]; 
    for (int i = 0; i < avgDataLenght; i++) 
    { 
     dataAvg[i, 0] = averageData[i].Item1; 
     dataAvg[i, 1] = averageData[i].Item2; 
    } 
    Series avgSeries = new Series { Name = "Genel Toplam", Data = new Data(dataAvg), Type = ChartTypes.Line }; 
    series.Add(avgSeries); 

    return series; 
} 
관련 문제