簡體   English   中英

EF Core DbContext Where Async

[英]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方法上,而是在獲取數據的方法上,如ToArrayAsyncFirstAsync

Where子句實際上並沒有做任何事情,它只是延遲執行。 您可以只將FirstAsyncToListAsyncToArrayAsyncWhere ToArrayAsync使用。

在您的代碼中,您應該刪除AsQueryable()部分。 沒有它,你應該沒問題:

await _context.Set<TEntity>().Where(selector).ToArrayAsync();

是的,您應該使用Expresion而不是Func DbSetDbContext可能沒有為接受Func Where提供重載。 實際上,這很常見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM