Пример #1
0
        public async Task <OriginDelays> GetOriginDelays()
        {
            var counted = new OriginDelaysCounted();

            await context.Flights.ForEachAsync(i =>
            {
                switch (i.Origin)
                {
                case "EWR":
                    counted.EWRArrivalDelay.Value   += i.Arr_Delay ?? 0;
                    counted.EWRArrivalDelay.Count   += i.Arr_Delay != null ? 1 : 0;
                    counted.EWRDepartureDelay.Value += i.Dep_Delay ?? 0;
                    counted.EWRDepartureDelay.Count += i.Dep_Delay != null ? 1 : 0;
                    break;

                case "JFK":
                    counted.JFKArrivalDelay.Value   += i.Arr_Delay ?? 0;
                    counted.JFKArrivalDelay.Count   += i.Arr_Delay != null ? 1 : 0;
                    counted.JFKDepartureDelay.Value += i.Dep_Delay ?? 0;
                    counted.JFKDepartureDelay.Count += i.Dep_Delay != null ? 1 : 0;
                    break;

                case "LGA":
                    counted.LGAArrivalDelay.Value   += i.Arr_Delay ?? 0;
                    counted.LGAArrivalDelay.Count   += i.Arr_Delay != null ? 1 : 0;
                    counted.LGADepartureDelay.Value += i.Dep_Delay ?? 0;
                    counted.LGADepartureDelay.Count += i.Dep_Delay != null ? 1 : 0;
                    break;
                }
            });

            return(new OriginDelays()
            {
                EWRArrivalDelay = (double)counted.EWRArrivalDelay.Value / counted.EWRArrivalDelay.Count,
                EWRDepartureDelay = (double)counted.EWRDepartureDelay.Value / counted.EWRDepartureDelay.Count,
                JFKArrivalDelay = (double)counted.JFKArrivalDelay.Value / counted.JFKArrivalDelay.Count,
                JFKDepartureDelay = (double)counted.JFKDepartureDelay.Value / counted.JFKDepartureDelay.Count,
                LGAArrivalDelay = (double)counted.LGAArrivalDelay.Value / counted.LGAArrivalDelay.Count,
                LGADepartureDelay = (double)counted.LGADepartureDelay.Value / counted.LGADepartureDelay.Count,
            });
        }
Пример #2
0
        public async Task <ChartData> GetChartData()
        {
            var flightsPerMonth = new List <MonthFlightNumber>();

            for (int i = 1; i < 13; i++)
            {
                flightsPerMonth.Add(new MonthFlightNumber()
                {
                    Month = i
                });
            }

            var flightsPerMonthFromOrigins = new List <FlightsFromOriginsPerMonth>();

            var flightsPerMonthFromOriginPercentage = new List <FlightsFromOriginsPerMonth>();

            var topTenDestinationsByFlights = new List <DestinationFlightCount>();

            var topTenDestinationsByFlightsFromOrigins = new List <AirportNameMainAirportsCount>();

            var meanAirTime = new MeanAirTime();
            int ewrCount, jfkCount, lgaCount;

            ewrCount = jfkCount = lgaCount = 0;

            var originsDelaysCounted = new OriginDelaysCounted();

            await context.Flights.ForEachAsync(flight =>
            {
                // First requirement
                flightsPerMonth.Find(x => x.Month == flight.Month).NumberOfFlights++;

                // Second requirement
                if (!flightsPerMonthFromOrigins.Any(x => x.Month == flight.Month))
                {
                    flightsPerMonthFromOrigins.Add(new FlightsFromOriginsPerMonth()
                    {
                        Month = flight.Month
                    });
                }

                switch (flight.Origin)
                {
                case "EWR":
                    flightsPerMonthFromOrigins.Find(x => x.Month == flight.Month).EWR++;
                    break;

                case "JFK":
                    flightsPerMonthFromOrigins.Find(x => x.Month == flight.Month).JFK++;
                    break;

                case "LGA":
                    flightsPerMonthFromOrigins.Find(x => x.Month == flight.Month).LGA++;
                    break;
                }

                // Fourth requirement
                if (!topTenDestinationsByFlights.Any(x => x.Dest == flight.Dest))
                {
                    topTenDestinationsByFlights.Add(new DestinationFlightCount()
                    {
                        Dest = flight.Dest
                    });
                }

                topTenDestinationsByFlights.Find(x => x.Dest == flight.Dest).FlightsCount++;

                // Fifth requirement
                if (!topTenDestinationsByFlightsFromOrigins.Any(x => x.AirportName == flight.Dest))
                {
                    topTenDestinationsByFlightsFromOrigins.Add(new AirportNameMainAirportsCount()
                    {
                        AirportName = flight.Dest
                    });
                }

                switch (flight.Origin)
                {
                case "EWR":
                    topTenDestinationsByFlightsFromOrigins.Find(x => x.AirportName == flight.Dest).EWR++;
                    break;

                case "JFK":
                    topTenDestinationsByFlightsFromOrigins.Find(x => x.AirportName == flight.Dest).JFK++;
                    break;

                case "LGA":
                    topTenDestinationsByFlightsFromOrigins.Find(x => x.AirportName == flight.Dest).LGA++;
                    break;
                }

                // Sixth requirement
                switch (flight.Origin)
                {
                case "EWR":
                    meanAirTime.EWR += flight.Air_Time ?? 0;
                    ewrCount++;
                    break;

                case "JFK":
                    meanAirTime.JFK += flight.Air_Time ?? 0;
                    jfkCount++;
                    break;

                case "LGA":
                    meanAirTime.LGA += flight.Air_Time ?? 0;
                    lgaCount++;
                    break;
                }
                //
                switch (flight.Origin)
                {
                case "EWR":
                    originsDelaysCounted.EWRArrivalDelay.Value   += flight.Arr_Delay ?? 0;
                    originsDelaysCounted.EWRArrivalDelay.Count   += flight.Arr_Delay != null ? 1 : 0;
                    originsDelaysCounted.EWRDepartureDelay.Value += flight.Dep_Delay ?? 0;
                    originsDelaysCounted.EWRDepartureDelay.Count += flight.Dep_Delay != null ? 1 : 0;
                    break;

                case "JFK":
                    originsDelaysCounted.JFKArrivalDelay.Value   += flight.Arr_Delay ?? 0;
                    originsDelaysCounted.JFKArrivalDelay.Count   += flight.Arr_Delay != null ? 1 : 0;
                    originsDelaysCounted.JFKDepartureDelay.Value += flight.Dep_Delay ?? 0;
                    originsDelaysCounted.JFKDepartureDelay.Count += flight.Dep_Delay != null ? 1 : 0;
                    break;

                case "LGA":
                    originsDelaysCounted.LGAArrivalDelay.Value   += flight.Arr_Delay ?? 0;
                    originsDelaysCounted.LGAArrivalDelay.Count   += flight.Arr_Delay != null ? 1 : 0;
                    originsDelaysCounted.LGADepartureDelay.Value += flight.Dep_Delay ?? 0;
                    originsDelaysCounted.LGADepartureDelay.Count += flight.Dep_Delay != null ? 1 : 0;
                    break;
                }
            });

            // Sixth requirement
            meanAirTime.EWR /= ewrCount;
            meanAirTime.JFK /= jfkCount;
            meanAirTime.LGA /= lgaCount;

            // Third requirement
            flightsPerMonthFromOriginPercentage = flightsPerMonthFromOrigins.Select(x => x.Copy()).ToList();
            foreach (var entry in flightsPerMonthFromOriginPercentage)
            {
                var total = entry.EWR + entry.JFK + entry.LGA;

                entry.EWR = entry.EWR * 100 / total;
                entry.JFK = entry.JFK * 100 / total;
                entry.LGA = entry.LGA * 100 / total;
            }

            var originDelays = new OriginDelays()
            {
                EWRArrivalDelay   = (double)originsDelaysCounted.EWRArrivalDelay.Value / originsDelaysCounted.EWRArrivalDelay.Count,
                EWRDepartureDelay = (double)originsDelaysCounted.EWRDepartureDelay.Value / originsDelaysCounted.EWRDepartureDelay.Count,
                JFKArrivalDelay   = (double)originsDelaysCounted.JFKArrivalDelay.Value / originsDelaysCounted.JFKArrivalDelay.Count,
                JFKDepartureDelay = (double)originsDelaysCounted.JFKDepartureDelay.Value / originsDelaysCounted.JFKDepartureDelay.Count,
                LGAArrivalDelay   = (double)originsDelaysCounted.LGAArrivalDelay.Value / originsDelaysCounted.LGAArrivalDelay.Count,
                LGADepartureDelay = (double)originsDelaysCounted.LGADepartureDelay.Value / originsDelaysCounted.LGADepartureDelay.Count,
            };

            return(new ChartData()
            {
                FlightsPerMonth = flightsPerMonth.OrderBy(x => x.Month),
                FlightsPerMonthFromOrigins = flightsPerMonthFromOrigins.OrderBy(x => x.Month),
                FlightsPerMonthFromOriginPercentage = flightsPerMonthFromOriginPercentage.OrderBy(x => x.Month),
                TopTenDestinationsByFlights = topTenDestinationsByFlights.OrderByDescending(x => x.FlightsCount).Take(10),
                TopTenDestinationsByFlightsFromOrigins = topTenDestinationsByFlightsFromOrigins.OrderByDescending(x => x.EWR + x.JFK + x.LGA).Take(10),
                MeanAirTime = meanAirTime,
                OriginDelays = originDelays
            });
        }