/// <summary> /// Method get a list of vehicle and information for the parked vehicle list /// </summary> /// <param name="iGarageId">Garage id</param> /// <returns>List of GarageVehiclesInfoViewModel objects</returns> private async Task <List <GarageVehiclesInfoViewModel> > GetParkedVehiclelist(int iGarageId) { var garage = await dbGarage.Garage.AsNoTracking().Where(i => i.GarageId == iGarageId).FirstOrDefaultAsync(); var members = await dbGarage.Membership.AsNoTracking().Where(i => i.GarageId == iGarageId).ToListAsync(); int iNumberOfOccupiedParkingPlaces = await dbGarage.ParkingPlace.Where(g => g.GarageId == garage.GarageId && g.IsOccupied).CountAsync(); var vehicleTypes = await dbGarage.VehicleType.AsNoTracking().ToListAsync(); // TODO Check if algo is ok in another test project // Now i want to know a members type of membership foreach (var member in members) { member.TypeOfMembersShip = MemberShipHelper.GetTypeOfMemberShip(member); } var results = await dbGarage.ParkingPlace .Join( dbGarage.Vehicle, parkingPlace => parkingPlace.ParkingPlaceId, vehicle => vehicle.ParkingPlaceId, (parkingPlace, vehicle) => new GarageVehiclesInfoViewModel { VehicleId = vehicle.VehicleId, RegistrationNumber = vehicle.RegistrationNumber, CheckInTime = vehicle.CheckInTime, CheckOutTime = DateTime.Now, IsParked = vehicle.IsParked, VehicleTypeId = vehicle.VehicleTypeId, VehicleType = String.Empty, MemberShipId = vehicle.MembershipId, Make = vehicle.Make, Model = vehicle.Model, Year = vehicle.Year, ParkingPlaceId = parkingPlace.ParkingPlaceId, GarageId = parkingPlace.GarageId }) .Where(n => n.GarageId == iGarageId && n.IsParked == true) .ToListAsync(); // Get data i dident get in the join Membership memberShip = null; VehicleType vehicleType = null; foreach (var result in results) { // Get members first and last name memberShip = members.Where(m => m.MembershipId == result.MemberShipId).FirstOrDefault(); if (memberShip != null) { result.MemberFirstName = memberShip.FirstName; result.MemberLastName = memberShip.LastName; } // Get the vehicle type vehicleType = vehicleTypes.Where(v => v.VehicleTypeId == result.VehicleTypeId).FirstOrDefault(); if (vehicleType != null) { result.VehicleType = vehicleType.Type_Name; } result.ParkedTime = VehicleHelper.CalculateParkedTime(result.CheckInTime); } return(results); }