コード例 #1
0
        private void HandleStationsFromExisting(IList <List <HtmlNode> > rows, Train train, TrainInstance trainInstance)
        {
            if (trainInstance.Id != 0)
            {
                trainInstance?.TrainInstanceStations.Clear();
            }

            DbContext.Entry(train).Collection(t => t.TrainStations).Query().Include(st => st.Station).Load();
            Dictionary <string, TrainStation> trainStations = train.TrainStations.ToDictionary(st => st.Station.NormName, st => st);

            foreach (IList <HtmlNode> row in rows)
            {
                var(_, actualArrival)   = Parsing.GetCellTimes(row[2]);
                var(_, actualDeparture) = Parsing.GetCellTimes(row[3]);

                var trainInstanceStation = new TrainInstanceStation
                {
                    TrainInstance   = trainInstance,
                    TrainStation    = trainStations[Station.NormalizeName(row[1].InnerText.Trim())],
                    ActualArrival   = actualArrival,
                    ActualDeparture = actualDeparture
                };

                trainInstance.TrainInstanceStations.Add(trainInstanceStation);
            }
        }
コード例 #2
0
        private void HandleStationsRecreate(IList <List <HtmlNode> > rows, Train train, TrainInstance trainInstance)
        {
            List <string> stationNames = new List <string>();

            train.TrainStations.Clear();
            trainInstance?.TrainInstanceStations.Clear();

            foreach (IList <HtmlNode> row in rows)
            {
                string stationName = row[1].InnerText.Trim();
                string normName    = Station.NormalizeName(stationName);
                stationNames.Add(normName);

                var(arrival, actualArrival)     = Parsing.GetCellTimes(row[2]);
                var(departure, actualDeparture) = Parsing.GetCellTimes(row[3]);
                var platform = row.Count == 5 ? row[4].InnerText.Trim() : null;

                var trainStation = new TrainStation
                {
                    Train   = train,
                    Ordinal = train.TrainStations.Count,
                    Station = new Station()
                    {
                        Name = stationName, NormName = normName
                    },
                    Arrival   = arrival,
                    Departure = departure,
                    Platform  = string.IsNullOrEmpty(platform) ? null : platform
                };

                train.TrainStations.Add(trainStation);

                if (trainInstance != null)
                {
                    var trainInstanceStation = new TrainInstanceStation
                    {
                        TrainInstance   = trainInstance,
                        TrainStation    = trainStation,
                        ActualArrival   = actualArrival,
                        ActualDeparture = actualDeparture
                    };

                    trainInstance.TrainInstanceStations.Add(trainInstanceStation);
                }
            }

            IDictionary <string, Station> stations = DbContext.Stations.Where(s => stationNames.Contains(s.NormName)).ToDictionary(s => s.NormName, s => s);

            foreach (TrainStation trainStation in train.TrainStations)
            {
                trainStation.Station = stations[trainStation.Station.NormName];
            }

            var relativeDistances = GetRelativeDistances(train.TrainStations.Select(s => s.Station).ToList());

            for (int i = 0; i < train.TrainStations.Count; i++)
            {
                train.TrainStations[i].RelativeDistance = relativeDistances[i];
            }
        }