public List <Models.Business.Show> GetAvailableShow(DateTime startTime) { var shows = _queryFactory.GetAvailableShow(startTime); var showIds = shows.Select(s => s.Id).ToList(); var bookings = _queryFactory.GetBookingsByShowList(showIds); var roomIds = shows.Select(s => s.RoomId).ToList(); var seats = _queryFactory.GetAllSeatsByRoomIdList(roomIds); var bookedSeats = bookings.Select(b => b.SeatId); var availableSeats = seats.Where(s => !bookedSeats.Contains(s.Id)).ToList(); var result = new List <Models.Business.Show>(); foreach (var show in shows) { var showResult = new Models.Business.Show(); showResult.MovieName = show.Movie.Name; showResult.RoomName = show.Room.Name; showResult.Seats = availableSeats.Select(s => new Models.Business.Seat() { RowNumber = s.RowNumber, SeatNumber = s.SeatNumber }).ToList(); result.Add(showResult); } return(result); }