public IHttpActionResult SearchTrain(int startStationId, int endStationId) { int statStationRouteId = _context.Stations.Single(s => s.SID == startStationId).RID; int endStationRouteId = _context.Stations.Single(s => s.SID == endStationId).RID; //both stations in same GetRoute if (statStationRouteId == endStationRouteId) { var data = GetTrains(startStationId, endStationId); var timeTaken = TimeSpan.FromSeconds(CalculateApproximateTime(data)); var options = new OptionDto { TimeTaken = timeTaken.ToString("g"), Options = data }; var result = new SearchTrainResult(); result.Result.Add(options); result.Count = "1"; return(Ok(result)); } //stations in near by GetRoute var startStationPrimaryRId = _context.Routes.Single(r => r.RID == statStationRouteId).prid; var endStationPrimaryRId = _context.Routes.Single(r => r.RID == endStationRouteId).prid; var flag = (statStationRouteId == endStationPrimaryRId) ? 1 : ((endStationRouteId == startStationPrimaryRId) ? 2 : ((startStationPrimaryRId == endStationPrimaryRId) ? 3 : 0)); if (flag > 0) { int findStation = flag == 1 ? endStationRouteId : statStationRouteId; int connectingStation = GetConnectingStation(findStation); var list1 = GetTrains(startStationId, connectingStation); var list2 = GetTrains(connectingStation, endStationId); var result = FilterResult(list1, list2); return(Ok(result)); } { _routeIdList = new List <int>(); _routeIdList = GetRoute(statStationRouteId, endStationRouteId); return(Ok(_routeIdList)); } }
private static SearchTrainResult FilterResult(IEnumerable <TrainDataDto> list1, List <TrainDataDto> list2) { SearchTrainResult result = new SearchTrainResult(); foreach (TrainDataDto dataDto in list1) { var data = new OptionDto(); foreach (TrainDataDto trainDataDto in list2) { if (trainDataDto.StartStationDeparture1 >= dataDto.EndStationArrival1) { if (dataDto.TrainId == trainDataDto.TrainId) { dataDto.EndStationArrival = trainDataDto.EndStationArrival; //dataDto.EndStationDeparture = trainDataDto.EndStationDeparture; dataDto.EndStationId = trainDataDto.EndStationId; data.Options.Add(dataDto); list2.Remove(trainDataDto); break; } else { data.Options.Add(dataDto); data.Options.Add(trainDataDto); break; } } } if (data.Options.Count <= 0) { continue; } data.TimeTaken = TimeSpan.FromSeconds(CalculateApproximateTime(data.Options)).ToString(); result.Result.Add(data); } result.Count = result.Result.Count.ToString(); return(result); }