Skip to content

Commit ba9d3ad

Browse files
committed
fix(query-set): support multiple filters
closes #12
1 parent 12974aa commit ba9d3ad

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

src/JsonApiDotNetCore/Controllers/JsonApiController.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,9 @@ private IQueryable<T> ApplySortAndFilterQuery(IQueryable<T> entities)
167167
if(_jsonApiContext.QuerySet == null)
168168
return entities;
169169

170-
if(query.Filter != null)
171-
entities = _entities.Filter(entities, query.Filter);
170+
if(query.Filters.Count > 0)
171+
foreach(var filter in query.Filters)
172+
entities = _entities.Filter(entities, filter);
172173

173174
if(query.SortParameters != null && query.SortParameters.Count > 0)
174175
entities = _entities.Sort(entities, query.SortParameters);

src/JsonApiDotNetCore/Data/DefaultEntityRepository.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public virtual async Task<bool> DeleteAsync(TId id)
123123
return true;
124124
}
125125

126-
public IQueryable<TEntity> Include(IQueryable<TEntity> entities, string relationshipName)
126+
public virtual IQueryable<TEntity> Include(IQueryable<TEntity> entities, string relationshipName)
127127
{
128128
var entity = _jsonApiContext.RequestEntity;
129129
if(entity.Relationships.Any(r => r.RelationshipName == relationshipName))
@@ -133,7 +133,7 @@ public IQueryable<TEntity> Include(IQueryable<TEntity> entities, string relation
133133
$"{entity.EntityName} does not have a relationship named {relationshipName}");
134134
}
135135

136-
public async Task<IEnumerable<TEntity>> PageAsync(IQueryable<TEntity> entities, int pageSize, int pageNumber)
136+
public virtual async Task<IEnumerable<TEntity>> PageAsync(IQueryable<TEntity> entities, int pageSize, int pageNumber)
137137
{
138138
if(pageSize > 0)
139139
return await entities

src/JsonApiDotNetCore/Internal/Query/QuerySet.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ public QuerySet(
1717
{
1818
_jsonApiContext = jsonApiContext;
1919
PageQuery = new PageQuery();
20+
Filters = new List<FilterQuery>();
2021
BuildQuerySet(query);
2122
}
2223

23-
public FilterQuery Filter { get; set; }
24+
public List<FilterQuery> Filters { get; set; }
2425
public PageQuery PageQuery { get; set; }
2526
public List<SortQuery> SortParameters { get; set; }
2627
public List<string> IncludedRelationships { get; set; }
@@ -31,7 +32,7 @@ private void BuildQuerySet(IQueryCollection query)
3132
{
3233
if (pair.Key.StartsWith("filter"))
3334
{
34-
Filter = ParseFilterQuery(pair.Key, pair.Value);
35+
Filters.Add(ParseFilterQuery(pair.Key, pair.Value));
3536
continue;
3637
}
3738

@@ -60,7 +61,7 @@ private FilterQuery ParseFilterQuery(string key, string value)
6061
var attribute = GetAttribute(propertyName);
6162

6263
if (attribute == null)
63-
return null;
64+
throw new JsonApiException("400", $"{propertyName} is not a valid property.");
6465

6566
return new FilterQuery(attribute, value);
6667
}

0 commit comments

Comments
 (0)