示例#1
0
 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();
        }