Skip to content

Commit 4d0de76

Browse files
author
Chris Santero
committed
add queryable enumeration transform method
The queryable transformer is a ghetto version of IEnumerable. It only exists to let JSONAPI Core access an async version of methods like ToArray. FirstOrDefault is another method we need.
1 parent d1256af commit 4d0de76

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

JSONAPI.EntityFramework/ActionFilters/AsynchronousEnumerationTransformer.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,10 @@ public async Task<T[]> Enumerate<T>(IQueryable<T> query, CancellationToken cance
1515
{
1616
return await query.ToArrayAsync(cancellationToken);
1717
}
18+
19+
public async Task<T> FirstOrDefault<T>(IQueryable<T> query, CancellationToken cancellationToken)
20+
{
21+
return await query.FirstOrDefaultAsync(cancellationToken);
22+
}
1823
}
1924
}

JSONAPI/QueryableTransformers/IQueryableEnumerationTransformer.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,14 @@ public interface IQueryableEnumerationTransformer
1818
/// <typeparam name="T">The queryable element type</typeparam>
1919
/// <returns>A task yielding the enumerated results of the query</returns>
2020
Task<T[]> Enumerate<T>(IQueryable<T> query, CancellationToken cancellationToken);
21+
22+
/// <summary>
23+
/// Gets the first result for the specified query.
24+
/// </summary>
25+
/// <param name="query">The query to enumerate</param>
26+
/// <param name="cancellationToken">The request's cancellation token. If this token is cancelled during enumeration, enumeration must halt.</param>
27+
/// <typeparam name="T">The queryable element type</typeparam>
28+
/// <returns>A task yielding the enumerated results of the query</returns>
29+
Task<T> FirstOrDefault<T>(IQueryable<T> query, CancellationToken cancellationToken);
2130
}
2231
}

JSONAPI/QueryableTransformers/SynchronousEnumerationTransformer.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,10 @@ public Task<T[]> Enumerate<T>(IQueryable<T> query, CancellationToken cancellatio
1313
{
1414
return Task.FromResult(query.ToArray());
1515
}
16+
17+
public Task<T> FirstOrDefault<T>(IQueryable<T> query, CancellationToken cancellationToken)
18+
{
19+
return Task.FromResult(query.FirstOrDefault());
20+
}
1621
}
1722
}

0 commit comments

Comments
 (0)