2015-04-20 7 views
0

У меня есть несколько записей с различными DateTimes, но мне нужно отслеживать их в графическом макете. Я в настоящее время удалось получить отрезок времени каждой записиГруппа и средние значения по неделям

List<myclass> recs = context.myclass.Where(c => c.RequestedTimestamp >= start & c.DeliveredTimestamp <= end).ToList(); 

foreach (var item in recs) 
{ 
    TimeSpan diff = (TimeSpan)(item.DeliveredTimestamp - item.RequestedTimestamp); 

    //more to come, this is where I realized I have issues 
} 

Это, конечно, вернет мне список timespans, но это само по себе не очень полезно.

Как можно было бы лучше подойти, чтобы получить список еженедельных (или ежемесячных) средних этих временных интервалов.

Проблема, которую я рассматриваю, заключается в том, что временные рамки забывают свои начальные и конечные точки, поэтому, хотя они могут быть усреднены, как будет выполняться усреднение в сгруппированном подходе?

Выход; средний временной интервал для группы DateTimes, должен быть подключен к диаграмме для визуального отображения.

+0

В настоящее время ваша проблема не ясна. Что случилось с 'TimeSpan', который вы вычисляете в' foreach'? Вы не создаете список, поэтому я не понимаю, «вернет мне список временных интервалов». Что вы делаете в foreach, почему он не работает так, как ожидалось? Или чего вы на самом деле пытаетесь достичь? –

+1

Здесь неясно. «TimeSpan» не позволит вам группироваться по недельным или ежемесячным средним значениям, потому что «TimeSpan» - это просто произвольное количество времени. Я думаю, что вы действительно просите, так или иначе, группировать свои «recs» каждую неделю, а затем получать временные рамки для каждого элемента в каждой группе. – Jonesopolis

+0

Я пренебрег тем, что поставил свой список для foreach, потому что получил половину линии и был в тупике, понимая, что то, что я имел в виду, не то, на что я надеялся. Что касается временного интервала, я упомянул, что понял, что это просто номер без ссылки. Но да, jonesy, я хочу группироваться по неделям/месяцам, а затем найти средний промежуток времени для этой группы – nickson104

ответ

0

Это, вероятно, не лучшее решение, которое было доступно, и в логике есть определенные дыры, однако на данный момент это решение работает в той степени, в которой это необходимо (система с низким приоритетом, поэтому высокая точность не нужна). Кроме того, извините за все цензурные переменные, такие как имя класса и т. Д., Я понимаю его боль в чтении.

public static List<ChartPoint> RenderWeeklyAverageChart(List<myclass> myclass, DateTime start, DateTime end) 
     { 
      DateTime datePointer = start; //1st date in list 
      List<ChartPoint> points = new List<ChartPoint>(); 
      double average = 0; 

      if (myclass!= null && myclass.Count > 0) 
      { 
       while (datePointer < DateTime.Now) 
       { 
        //Filter By Selected Week 
        List<myclass> Weekmyclass = myclass.Where(c => c.RequestedTimestamp >= datePointer && 
         c.RequestedTimestamp < datePointer.AddDays(7)).ToList(); 
        //If there are records, find the average timespan of the records 
        if (Weekmyclass != null && Weekmyclass.Count > 0) 
        { 
         long ticks = (long)WeekSlabs.Average(c => (c.DeliveredTimestamp.Value - c.RequestedTimestamp.Value).Ticks); 
         average = TimeSpan.FromTicks(ticks).TotalHours; 

         points.Add(new ChartPoint 
         { 
          PointValue = average, 
          AxisXText = datePointer.ToShortDateString() + " - " 
             + datePointer.AddDays(7).ToShortDateString() 
         }); 
        } 
        else 
        { 
         //Otherwise Add a Zero Record 
         points.Add(new ChartPoint 
         { 
          PointValue = 0, 
          AxisXText = datePointer.ToShortDateString() + " - " 
             + datePointer.AddDays(7).ToShortDateString() 
         }); 
        } 
        datePointer = datePointer.AddDays(7); 
       } 
      } 
      return points; 
     } 
Смежные вопросы