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); }