public async Task <List <PortReport> > GetOverallDayStatistic(DateTime day) { var reports = await PortReports.Query() .Where(report => report.Year == day.Year) .Where(report => report.Month == day.Month) .Where(report => report.Day == day.Day) .GroupBy(report => report.Hour) .Select(report => new { Hour = report.Key, Inbound = report.Sum(inner => inner.InboundTraffic), Outbound = report.Sum(inner => inner.OutboundTraffic) }) .ToListAsync(); var hourRange = Enumerable.Range(0, 24); var result = new List <PortReport>(); foreach (var hour in hourRange) { var existing = reports.FirstOrDefault(report => report.Hour == hour); if (existing != null) { result.Add(new PortReport { Day = day.Day, Year = day.Year, Hour = existing.Hour, Month = day.Month, InboundTraffic = existing.Inbound, OutboundTraffic = existing.Outbound }); } else { result.Add(new PortReport { Day = day.Day, Year = day.Year, Hour = hour, Month = day.Month }); } } return(result); }
public async Task <List <PortReport> > GetDayStatisticForPort(string snmpIpAddress, int portNumber, DateTime day) { var reports = await PortReports.Query() .Where(report => report.SnmpIpAddress == snmpIpAddress) .Where(report => report.PortNumber == portNumber) .Where(report => report.Year == day.Year) .Where(report => report.Month == day.Month) .Where(report => report.Day == day.Day) .ToListAsync(); var hourRange = Enumerable.Range(0, 24); var result = new List <PortReport>(); foreach (var hour in hourRange) { var existing = reports.FirstOrDefault(report => report.Hour == hour); if (existing != null) { result.Add(existing); } else { result.Add(new PortReport { Day = day.Day, Year = day.Year, PortNumber = portNumber, SnmpIpAddress = snmpIpAddress, Hour = hour, Month = day.Month }); } } return(result); }