public PagedResult <KeyValuePair <DateTime, IList <ReadingViewModel> > > GetReadingsPaged(ReadingsQuery query) { var datesPaged = Readings.Where(r => r.Measurement.Id == query.MeasurementId && (query.FromTime == null || r.ReadingTime >= query.FromTime) && (query.ToTime == null || r.ReadingTime <= query.ToTime) && (query.NewerThan == null || r.ReadingTime > query.NewerThan)) .OrderByIf(r => r.ReadingTime, () => query.Ascending) .Select(r => r.ReadingTime) .Distinct() .GetPaged(query.Page, query.PageSize); var dates = datesPaged.Results; // Make sure readings get SensorRole and Calculator loaded automatically // It's practically caching them for grouping query var measurement = Measurements.Include(m => m.SensorRoles) .Include(m => m.Calculators) .FirstOrDefault(m => m.Id == query.MeasurementId); var grouped = Readings.Where(r => (r.Measurement.Id == query.MeasurementId) && (dates == null || dates.Contains(r.ReadingTime)) ) .OrderByIf(r => r.ReadingTime, () => query.Ascending) .ToList() .AsQueryable() .ProjectTo <ReadingViewModel>() .GroupBy(r => r.ReadingTime) .Select(g => new KeyValuePair <DateTime, IList <ReadingViewModel> > ( g.Key, g.OrderBy(r => r.Name).ToList() )) .ToList(); var result = new PagedResult <KeyValuePair <DateTime, IList <ReadingViewModel> > >(); result.CurrentPage = datesPaged.CurrentPage; result.PageCount = datesPaged.PageCount; result.PageSize = datesPaged.PageSize; result.RowCount = datesPaged.RowCount; result.Results = grouped; return(result); }
public static void Get_Current_Month(ReadingCell.ReadingUnitType unit) { Temperature_Readings = new List <DataPoint>(); Humidity_Readings = new List <DataPoint>(); SetPoint_Readings = new List <DataPoint>(); int index = Current_Month; if (Current_Month == Total_Months) { index--; } DateTime start = Month_Start_Days[index]; DateTime end = start.AddMonths(1); foreach (ReadingCell cell in Readings.Where(x => x.Occurence >= start && x.Occurence <= end)) { Temperature_Readings.Add(new DataPoint ( DateTimeAxis.ToDouble(cell.Occurence), cell.Get_Temperature(unit) )); Humidity_Readings.Add(new DataPoint ( DateTimeAxis.ToDouble(cell.Occurence), cell.Humidity )); SetPoint_Readings.Add(new DataPoint ( DateTimeAxis.ToDouble(cell.Occurence), cell.Set_Point )); } }