public async Task <IEnumerable <Enterprise> > SearchEnterprises(SearchEnterpriseParameters sep) { var temp = await repo.GetAllEnterprisesForSearch(); List <Enterprise> retValue = new List <Enterprise>(); bool rented = false; List <DateTime> datesBetween2 = new List <DateTime>(); for (var date = sep.RentFrom; date <= sep.RentTo; date = date.AddDays(1)) { datesBetween2.Add(date); } foreach (var enterprise in temp) { if (sep.EnterpriseName != "" && sep.EnterpriseName != null) { if (enterprise.Name == sep.EnterpriseName || enterprise.Name.ToLower() == sep.EnterpriseName.ToLower()) { if (sep.BranchLocation != "" && sep.BranchLocation != null) { var found = 0; foreach (var branch in enterprise.Branches) { if (branch.City.ToLower() == sep.BranchLocation.ToLower() || enterprise.Address.City.ToLower() == sep.BranchLocation.ToLower()) { found++; break; } } if (found != 0) { foreach (var car in enterprise.Cars) { List <DateTime> datesBetween = new List <DateTime>(); foreach (var reservation in car.Reservations) { for (var date = reservation.DateFrom; date <= reservation.DateTo; date = date.AddDays(1)) { datesBetween.Add(date); } } foreach (var date1 in datesBetween) { foreach (var date2 in datesBetween2) { if (date1 == date2) { rented = true; } } } if (rented) { rented = false; continue; } else { retValue.Add(enterprise); break; } } } } else { foreach (var car in enterprise.Cars) { List <DateTime> datesBetween = new List <DateTime>(); foreach (var reservation in car.Reservations) { for (var date = reservation.DateFrom; date <= reservation.DateTo; date = date.AddDays(1)) { datesBetween.Add(date); } } foreach (var date1 in datesBetween) { foreach (var date2 in datesBetween2) { if (date1 == date2) { rented = true; } } } if (rented) { rented = false; continue; } else { retValue.Add(enterprise); break; } } } } } else if (sep.BranchLocation != "" && sep.BranchLocation != null) { var found = 0; foreach (var branch in enterprise.Branches) { if (branch.City.ToLower() == sep.BranchLocation.ToLower() || enterprise.Address.City.ToLower() == sep.BranchLocation.ToLower()) { found++; break; } } if (found != 0) { foreach (var car in enterprise.Cars) { List <DateTime> datesBetween = new List <DateTime>(); foreach (var reservation in car.Reservations) { for (var date = reservation.DateFrom; date <= reservation.DateTo; date = date.AddDays(1)) { datesBetween.Add(date); } } foreach (var date1 in datesBetween) { foreach (var date2 in datesBetween2) { if (date1 == date2) { rented = true; } } } if (rented) { rented = false; continue; } else { retValue.Add(enterprise); break; } } } } else { foreach (var car in enterprise.Cars) { List <DateTime> datesBetween = new List <DateTime>(); foreach (var reservation in car.Reservations) { for (var date = reservation.DateFrom; date <= reservation.DateTo; date = date.AddDays(1)) { datesBetween.Add(date); } } foreach (var date1 in datesBetween) { foreach (var date2 in datesBetween2) { if (date1 == date2) { rented = true; } } } if (rented) { rented = false; continue; } else { retValue.Add(enterprise); break; } } } } return(retValue); }