public static IQueryable <Distributor> RetrieveDistributorFilteredByZones(List <string> zones) { UnitOfWork Repository = new UnitOfWork(new PSDContext()); IQueryable <Distributor> itemsToFilter = Repository.Distributors.GetAllToFilter(); DistributorFilteringPipeline pipeline = new DistributorFilteringPipeline(); pipeline.Register(new ZoneListFilter(zones)); return(pipeline.Process(itemsToFilter)); }
public ActionResult FilterByZones() { // get the Distributor list var distributorList = controller.RetrieveAllToFilter(); // Construct the pipeline DistributorFilteringPipeline distributorPipeline = new DistributorFilteringPipeline(); // Register the filters to be executed List <string> zones = new List <string> { "40R" }; distributorPipeline.Register(new ZoneListFilter(null)); // Start pipeline processing var filteredDistributors = distributorPipeline.Process(distributorList); // At this point fetch data from DB var listedDistributors = filteredDistributors.ToList(); // just sending the result for testing purposes, cannot serialize the entire object because of the circular references present from EF. // (this is the same behavior with previous approach) var result = listedDistributors.Select(x => new Distributor { Id = x.Id, AddressId = x.AddressId, BusinessName = x.BusinessName, CommercialName = x.CommercialName, IdB = x.IdB, WebSite = x.WebSite, }); string JsonResult = JsonConvert.SerializeObject(result, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects }); return(Content(JsonResult)); }