public static IQueryable <Computer> Filter(IQueryable <Computer> computers, ComputerFacetSearchViewModel vm)
 {
     computers = FilterByRam(computers, vm);
     computers = FilterByHarddiskSize(computers, vm);
     computers = FilterByHarddiskType(computers, vm);
     computers = FilterByGraphicsCardModelKeyword(computers, vm);
     computers = FilterByTowerWeight(computers, vm);
     computers = FilterByPowerSupplyWatt(computers, vm);
     computers = FilterByCPUBrand(computers, vm);
     computers = FilterByCPUModelKeyword(computers, vm);
     computers = FilterByComputerIds(computers, vm);
     return(computers);
 }
示例#2
0
        private void FilterByConnectionNames(ComputerFacetSearchViewModel computer)
        {
            List <int> computersWithConnectors = null;

            if (computer.ConnectorNames != null && computer.ConnectorNames.Count > 0)
            {
                foreach (string connectorName in computer.ConnectorNames)
                {
                    List <int> computersWithSpecficConnectors = _context.Connectors.Where(c => c.Name == connectorName).Select(a => a.ComputerId).ToList();
                    if (computersWithConnectors == null)
                    {
                        computersWithConnectors = computersWithSpecficConnectors;
                    }
                    computersWithConnectors = computersWithConnectors.Intersect(computersWithSpecficConnectors).ToList();
                }
            }
            if (computersWithConnectors != null)
            {
                computer.ComputerIds = computersWithConnectors;
            }
        }
示例#3
0
        public async Task <ActionResult <IEnumerable <Computer> > > PostFacetSearchComputers(ComputerFacetSearchViewModel computer)
        {
            FilterByConnectionNames(computer);
            IQueryable <Computer> query = FindMyComputer.Manager.ComputerManagerUtility.Filter(_context.Computers, computer);
            var computers = await query.Include(c => c.Connectors).ToListAsync();

            return(computers);
        }
        private static IQueryable <Computer> FilterByComputerIds(IQueryable <Computer> computers, ComputerFacetSearchViewModel vm)
        {
            if (vm.ComputerIds != null)
            {
                computers = computers.Where(c => vm.ComputerIds.Contains(c.ComputerId));
            }

            return(computers);
        }
        private static IQueryable <Computer> FilterByHarddiskType(IQueryable <Computer> computers, ComputerFacetSearchViewModel vm)
        {
            if (vm.HarddiskTypes != null && vm.HarddiskTypes.Count > 0)
            {
                computers = computers.Where(c => vm.HarddiskTypes.Contains(c.HarddiskType));
            }

            return(computers);
        }
        private static IQueryable <Computer> FilterByCPUBrand(IQueryable <Computer> computers, ComputerFacetSearchViewModel vm)
        {
            if (vm.CPUBrandList != null && vm.CPUBrandList.Count > 0)
            {
                computers = computers.Where(c => vm.CPUBrandList.Contains(c.CPUBrand));
            }

            return(computers);
        }
        private static IQueryable <Computer> FilterByPowerSupplyWatt(IQueryable <Computer> computers, ComputerFacetSearchViewModel vm)
        {
            if (vm.MinPowerSupplyWatt != null || vm.MaxPowerSupplyWatt != null)
            {
                if (vm.MinPowerSupplyWatt != null && vm.MaxPowerSupplyWatt != null)
                {
                    computers = computers.Where(c => c.PowerSupplyWatt >= vm.MinPowerSupplyWatt && c.PowerSupplyWatt <= vm.MaxPowerSupplyWatt);
                }
                else if (vm.MinPowerSupplyWatt != null)
                {
                    computers = computers.Where(c => c.PowerSupplyWatt >= vm.MinPowerSupplyWatt);
                }
                else if (vm.MaxPowerSupplyWatt != null)
                {
                    computers = computers.Where(c => c.PowerSupplyWatt <= vm.MaxPowerSupplyWatt);
                }
            }

            return(computers);
        }
        private static IQueryable <Computer> FilterByTowerWeight(IQueryable <Computer> computers, ComputerFacetSearchViewModel vm)
        {
            if (vm.MinTowerWeight != null || vm.MaxTowerWeight != null)
            {
                if (vm.MinTowerWeight != null && vm.MaxTowerWeight != null)
                {
                    computers = computers.Where(c => c.TowerWeight >= vm.MinTowerWeight && c.TowerWeight <= vm.MaxTowerWeight);
                }
                else if (vm.MinTowerWeight != null)
                {
                    computers = computers.Where(c => c.TowerWeight >= vm.MinTowerWeight);
                }
                else if (vm.MaxTowerWeight != null)
                {
                    computers = computers.Where(c => c.TowerWeight <= vm.MaxTowerWeight);
                }
            }

            return(computers);
        }
        private static IQueryable <Computer> FilterByRam(IQueryable <Computer> computers, ComputerFacetSearchViewModel vm)
        {
            if (vm.MinRam != null || vm.MaxRam != null)
            {
                if (vm.MinRam != null && vm.MaxRam != null)
                {
                    computers = computers.Where(c => c.Ram >= vm.MinRam && c.Ram <= vm.MaxRam);
                }
                else if (vm.MinRam != null)
                {
                    computers = computers.Where(c => c.Ram >= vm.MinRam);
                }
                else if (vm.MaxRam != null)
                {
                    computers = computers.Where(c => c.Ram <= vm.MaxRam);
                }
            }

            return(computers);
        }
        private static IQueryable <Computer> FilterByHarddiskSize(IQueryable <Computer> computers, ComputerFacetSearchViewModel vm)
        {
            if (vm.MinHarddiskSize != null || vm.MaxHarddiskSize != null)
            {
                if (vm.MinHarddiskSize != null && vm.MaxHarddiskSize != null)
                {
                    computers = computers.Where(c => c.HarddiskSize >= vm.MinHarddiskSize && c.HarddiskSize <= vm.MaxHarddiskSize);
                }
                else if (vm.MinHarddiskSize != null)
                {
                    computers = computers.Where(c => c.HarddiskSize >= vm.MinHarddiskSize);
                }
                else if (vm.MaxHarddiskSize != null)
                {
                    computers = computers.Where(c => c.HarddiskSize <= vm.MaxHarddiskSize);
                }
            }

            return(computers);
        }
        private static IQueryable <Computer> FilterByCPUModelKeyword(IQueryable <Computer> computers, ComputerFacetSearchViewModel vm)
        {
            if (!string.IsNullOrWhiteSpace(vm.CPUModelKeyword))
            {
                //Full-text search should be used instead in a real app, as using % in prefix means a table scan has to be done.
                computers = computers.Where(c => EF.Functions.Like(c.CPUModel, "%" + vm.CPUModelKeyword + "%"));
            }

            return(computers);
        }