Consider supporting more query operators inside EF.CompileQuery
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
Research direction
Start with the EF.CompileQuery and EF.CompileAsyncQuery entry points and compare the overloads that return IQueryable with those returning Task. Review how ToList, ToArray, and single-result operators are represented in the examples. Done means the supported operator scope and resulting compiled-query behavior are defined, with coverage for the intended overloads.
Written by the indexing model from the issue text.
Description
For instance, ToList, or ToArray. I am not sure how the EF.CompileQuery/EF.CompileAsyncQuery is going to evolve with the adoption of the new IAsyncEnumerable<T>, but if it stays similar to what we have today, we could add logic to support what @cwoodruff described in https://twitter.com/cwoodruff/status/1090236542696779778:
private static readonly Func<ChinookContext, Task<List<Album>>> _queryGetAllAlbums =
EF.CompileAsyncQuery((ChinookContext db) => db.Album.ToList());
This is matching an overload of CompileAsyncQuery that returns Task. These overloads are designed to work for methods that return a single element, e.g. a query that ends in First(). We didn't expect customers to use them to get a List.
AFAIK, if you want to get a list asynchronously from a compiled query, you have to create the compiled query calling an overload of CompileAsyncQuery that takes a lambda that returns an IQueryable, and then call ToListAsync() each time on the result of invoking the compiled query delegate, e.g.:
private static readonly Func<ChinookContext, Task<List<Album>>> _queryGetAllAlbums =
EF.CompileAsyncQuery((ChinookContext db) => db.Album);
...
var results = await _queryGetAllAlbums(db).ToListAsync();
- Dominant language
- C#
- Stars
- 14.8k
- Forks
- 3.4k
- Avg merge
- 2d 5h
- Merged PRs (30d)
- 134
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from dotnet/efcore
-
Difficulty 4/5 3-5 days Newbie friendliness 55/100
-
customer-reported
Difficulty 5/5 Over a week Newbie friendliness 38/100
-
area-cosmos area-vector-search
Difficulty 5/5 Over a week Newbie friendliness 25/100
-
area-cosmos
Difficulty 5/5 Over a week Newbie friendliness 25/100
-
area-tools needs-design
Difficulty 4/5 3-5 days Newbie friendliness 25/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100