public List <Ride> GetRides() { CategoryRepository categoryRepository = new CategoryRepository(); ReportRepository reportRepository = new ReportRepository(); List <Ride> rides = new List <Ride>(); string sql = "SELECT Rides.RideId, Rides.Name, Rides.Description, Rides.CategoryId, Rides.Status, Reports.Status AS ReportStatus, Reports.ReportTime, Reports.Notes, Reports.RideId AS ReportRideId FROM Rides LEFT JOIN Reports ON Rides.RideId = Reports.RideId"; DataSet ds = ExecuteQuery(sql); foreach (DataRow row in ds.Tables[0].Rows) { RideCategory rideCategory = categoryRepository.GetRideCategory((int)row["CategoryId"]); bool rideExists = false; if (rides.Count == 0) { Ride ride = new Ride( (Status)(int)row["Status"], rideCategory, (string)row["Description"], (string)row["Name"], (int)row["RideId"] ); if (int.TryParse(row["ReportStatus"].ToString(), out int status)) { Report report = new Report( (string)row["Notes"], (DateTime)row["ReportTime"], (Status)(int)row["ReportStatus"], ride, (int)row["ReportRideId"] ); ride.Reports.Add(report); } rides.Add(ride); } else { foreach (Ride ride in rides) { if (ride.Id == (int)row["RideId"]) { if (int.TryParse(row["ReportStatus"].ToString(), out int status)) { Report report = new Report( (string)row["Notes"], (DateTime)row["ReportTime"], (Status)(int)row["ReportStatus"], ride, (int)row["ReportRideId"] ); ride.Reports.Add(report); } rideExists = true; } } if (!rideExists) { Ride ride = new Ride( (Status)(int)row["Status"], rideCategory, (string)row["Description"], (string)row["Name"], (int)row["RideId"] ); if (int.TryParse(row["ReportStatus"].ToString(), out int status)) { Report report = new Report( (string)row["Notes"], (DateTime)row["ReportTime"], (Status)(int)row["ReportStatus"], ride, (int)row["ReportRideId"] ); ride.Reports.Add(report); } rides.Add(ride); } } } return(rides); }