public static SearchVm FromModel(Search search) { return new SearchVm { Category = CategoryVm.FromModel(search.Category), SubCategory = SubCategoryVm.FromModel(search.SubCategory), Keywords = search.Keywords, City = search.City, State = search.State, ZipCode = search.ZipCode }; }
List<Organization> IOrganizationService.Get(Search search) { var start = DateTime.Now; var zips = this.locationRepository.GetZipCodesInRadius(search.ZipCode, 25).ToList(); var end = DateTime.Now; Debug.WriteLine("Get Zip Codes time: " + end.Subtract(start)); var subcats = new List<int>(); if (search.ZipCode != 0 && search.SubCategory != null && search.SubCategory.Id > 0) { subcats.Add(search.SubCategory.Id); } else if (search.ZipCode != 0 && search.Category != null && search.Category.Id > 0) { var category = categoryService.GetCategory(search.Category.Id); foreach (var subcat in category.SubCategories) { subcats.Add(subcat.Id); } } start = DateTime.Now; var results = this.organizationRepository.GetOrganizationsInZipCodeRadius(zips, subcats).Select(x => x.Id).Distinct().ToList(); end = DateTime.Now; Debug.WriteLine("Get Orgs in Zip Radius time: " + end.Subtract(start)); start = DateTime.Now; var organizations = this.organizationRepository.Get(org => results.Any(r => org.Id == r)); end = DateTime.Now; Debug.WriteLine("Get Orgs time: " + end.Subtract(start)); start = DateTime.Now; foreach (var org in organizations) { var locations = org.Locations.Where(l => zips.Any(z => z.Zipcode.ToString() == l.Address.ZipCode)); foreach (var location in locations) { var zipToCheck = zips.Where(z => z.Zipcode.ToString() == location.Address.ZipCode).First(); location.DistanceFromPoint =zipToCheck.Distance; } } end = DateTime.Now; Debug.WriteLine("Get locations time: " + end.Subtract(start)); return organizations.ToList(); }