Exemplo n.º 1
0
        private QueryableSingleRepository <TNav> LocateItemByFilters(IQueryable <TNav> query, RestItemData itemData)
        {
            IEnumerable <FilterInstruction> filterInstructions = GetFilterInstructions(itemData);
            var filter    = new QueryableFieldFilter <TNav>(_subContext.Fields, filterInstructions);
            var itemQuery = filter.ApplyFilter(query).SingleDefferred();

            return(new QueryableSingleRepository <TNav>(itemQuery));
        }
        public void StartsWithFilter_Fred_FiltersToThose()
        {
            var filter = new QueryableFieldFilter<Artist>(new FieldDictionary<Artist>
            {
                { "name", a => a.Name }
            }, new List<FilterInstruction>
            {
                new FilterInstruction("name", FilterComparisonOperator.StartsWith, "Fred")
            });

            var artists = GetFakeArtistsList();

            var filtered = filter.ApplyFilter(artists.AsQueryable());
            Assert.Equal(3, filtered.Count());
        }
        public void IsInFilter_BandList_FiltersToThose()
        {
            var filter = new QueryableFieldFilter<Artist>(new FieldDictionary<Artist>
            {
                { "name", a => a.Name }
            }, new List<FilterInstruction>
            {
                new FilterInstruction("name", FilterComparisonOperator.IsIn, "Bill's band featuring Davey McDave")
            });

            var artists = GetFakeArtistsList();

            var filtered = filter.ApplyFilter(artists.AsQueryable());
            Assert.Equal(2, filtered.Count());
        }
        public void GreaterThanFilter_ID_OnlyAboveID(int minId)
        {
            var filter = new QueryableFieldFilter<Artist>(new FieldDictionary<Artist>
            {
                { "id", a => a.ID }
            }, new List<FilterInstruction>
            {
                new FilterInstruction("id", FilterComparisonOperator.GreaterThan, minId.ToString())
            });

            var artists = GetFakeArtistsList();

            var filtered = filter.ApplyFilter(artists.AsQueryable());
            Assert.Equal(artists.Count(a => a.ID > minId), filtered.Count());
        }
        public void EqualsFilter_Name_OnlyThatOne()
        {
            var filter = new QueryableFieldFilter<Artist>(new FieldDictionary<Artist>
            {
                { "name", a => a.Name }
            }, new List<FilterInstruction>
            {
                new FilterInstruction("name", FilterComparisonOperator.Equals, "Right Said Fred")
            });

            var artists = GetFakeArtistsList();

            var filtered = filter.ApplyFilter(artists.AsQueryable());
            Assert.Equal(1, filtered.Count());
            Assert.Equal("Right Said Fred", filtered.First().Name);
        }
        public IQueryable <TItem> BuildQueryable()
        {
            IQueryable <TItem> items = _context.Repository.GetAllItems();

            items = _context.AuthorizationChecker.ApplyFilter(items);

            if (_query == null)
            {
                return(items);
            }

            var filter = new QueryableFieldFilter <TItem>(_context.Fields, _query.FilterInstructions);

            items = filter.ApplyFilter(items);

            var sorter = new QueryableFieldSorter <TItem>(_context.Fields, _query.SortInstructions);

            items = sorter.ApplySortOrder(items);

            items = _pager.ApplyPagination(items);

            return(items);
        }