Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2221d57

Browse files
Merge pull request #416 from milosloub/Nested-sort
Nested sort
2 parents 8570b21 + d1bc2cb commit 2221d57

File tree

19 files changed

+459
-251
lines changed

19 files changed

+459
-251
lines changed

‎src/Examples/JsonApiDotNetCoreExample/Models/Person.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ public class Person : Identifiable, IHasMeta
1919
[Attr("last-name")]
2020
public string LastName { get; set; }
2121

22+
[Attr("age")]
23+
public int Age { get; set; }
24+
2225
[HasMany("todo-items")]
2326
public virtual List<TodoItem> TodoItems { get; set; }
2427

‎src/JsonApiDotNetCore/Data/DefaultEntityRepository.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ public virtual IQueryable<TEntity> Get()
9090
/// <inheritdoc />
9191
public virtual IQueryable<TEntity> Filter(IQueryable<TEntity> entities, FilterQuery filterQuery)
9292
{
93-
if(_resourceDefinition != null)
93+
if(_resourceDefinition != null)
9494
{
9595
var defaultQueryFilters = _resourceDefinition.GetQueryFilters();
96-
if(defaultQueryFilters != null && defaultQueryFilters.TryGetValue(filterQuery.Attribute, out var defaultQueryFilter) == true)
96+
if(defaultQueryFilters != null && defaultQueryFilters.TryGetValue(filterQuery.Attribute, out var defaultQueryFilter) == true)
9797
{
9898
return defaultQueryFilter(entities, filterQuery.Value);
9999
}
@@ -106,17 +106,17 @@ public virtual IQueryable<TEntity> Filter(IQueryable<TEntity> entities, FilterQu
106106
public virtual IQueryable<TEntity> Sort(IQueryable<TEntity> entities, List<SortQuery> sortQueries)
107107
{
108108
if (sortQueries != null && sortQueries.Count > 0)
109-
return entities.Sort(sortQueries);
110-
111-
if(_resourceDefinition != null)
109+
return entities.Sort(_jsonApiContext,sortQueries);
110+
111+
if(_resourceDefinition != null)
112112
{
113113
var defaultSortOrder = _resourceDefinition.DefaultSort();
114-
if(defaultSortOrder != null && defaultSortOrder.Count > 0)
114+
if(defaultSortOrder != null && defaultSortOrder.Count > 0)
115115
{
116-
foreach(var sortProp in defaultSortOrder)
117-
{
116+
foreach(var sortProp in defaultSortOrder)
117+
{
118118
// this is dumb...add an overload, don't allocate for no reason
119-
entities.Sort(new SortQuery(sortProp.Item2, sortProp.Item1));
119+
entities.Sort(_jsonApiContext,new SortQuery(sortProp.Item2, sortProp.Item1.PublicAttributeName));
120120
}
121121
}
122122
}
@@ -189,10 +189,10 @@ private void AttachHasManyPointers(TEntity entity)
189189
var relationships = _jsonApiContext.HasManyRelationshipPointers.Get();
190190
foreach (var relationship in relationships)
191191
{
192-
if(relationship.Key is HasManyThroughAttribute hasManyThrough)
192+
if(relationship.Key is HasManyThroughAttribute hasManyThrough)
193193
AttachHasManyThrough(entity, hasManyThrough, relationship.Value);
194194
else
195-
AttachHasMany(relationship.Key as HasManyAttribute, relationship.Value);
195+
AttachHasMany(relationship.Key as HasManyAttribute, relationship.Value);
196196
}
197197
}
198198

@@ -289,15 +289,15 @@ public virtual async Task<bool> DeleteAsync(TId id)
289289
/// <inheritdoc />
290290
public virtual IQueryable<TEntity> Include(IQueryable<TEntity> entities, string relationshipName)
291291
{
292-
if(string.IsNullOrWhiteSpace(relationshipName)) throw new JsonApiException(400, "Include parameter must not be empty if provided");
292+
if(string.IsNullOrWhiteSpace(relationshipName)) throw new JsonApiException(400, "Include parameter must not be empty if provided");
293293

294294
var relationshipChain = relationshipName.Split('.');
295295

296296
// variables mutated in recursive loop
297297
// TODO: make recursive method
298298
string internalRelationshipPath = null;
299299
var entity = _jsonApiContext.RequestEntity;
300-
for(var i = 0; i < relationshipChain.Length; i++)
300+
for(var i = 0; i < relationshipChain.Length; i++)
301301
{
302302
var requestedRelationship = relationshipChain[i];
303303
var relationship = entity.Relationships.FirstOrDefault(r => r.PublicRelationshipName == requestedRelationship);
@@ -315,7 +315,7 @@ public virtual IQueryable<TEntity> Include(IQueryable<TEntity> entities, string
315315
internalRelationshipPath = (internalRelationshipPath == null)
316316
? relationship.RelationshipPath
317317
: $"{internalRelationshipPath}.{relationship.RelationshipPath}";
318-
318+
319319
if(i < relationshipChain.Length)
320320
entity = _jsonApiContext.ResourceGraph.GetContextEntity(relationship.Type);
321321
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /