[英]EF Core DbContext Where Async
我正在嘗試執行包含 WHERE 作為異步函數的查詢。 就像使用FirstAsync
操作一樣,但沒有WhereAsync
所以我想知道是否有一些解決方法。
我有一個具有GetEntitiesAsync
函數的ApplicationRepository
對象,我試過這個:
public async Task<IEnumerable<TEntity>> GetEntitiesAsync<TEntity>(Func<TEntity, bool> selector) where TEntity : class =>
await _context.Set<TEntity>().Where(selector).AsQueryable().ToArrayAsync();
但是,這行代碼拋出異常:
System.InvalidOperationException: The source IQueryable doesn't implement IAsyncEnumerable<OneStopApp.Models.CustomForm>. Only sources that implement IAsyncEnumerable can be used for Entity Framework asynchronous operations.
有一個ToListAsync
方法可以異步調用以獲取數據。
var list = await db.Accounts.Where(x => true).ToListAsync();
獲取數據需要大量時間,因此 async 不在Where
方法上,而是在獲取數據的方法上,如ToArrayAsync
或FirstAsync
。
Where
子句實際上並沒有做任何事情,它只是延遲執行。 您可以只將FirstAsync
、 ToListAsync
或ToArrayAsync
與Where
ToArrayAsync
使用。
在您的代碼中,您應該刪除AsQueryable()
部分。 沒有它,你應該沒問題:
await _context.Set<TEntity>().Where(selector).ToArrayAsync();
是的,您應該使用Expresion
而不是Func
。 DbSet
或DbContext
可能沒有為接受Func
Where
提供重載。 實際上,這很常見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.