我有一個同步專案,我目前正在努力使其異步。
我有以下查詢。它旨在獲取特定購買專案的資料,然后獲取該專案的最后購買日期以及購買數量。
private IQueryable<ItemOverviewDto> GetBaseQuery(string userId)
{
var query = this.Context.Items
.Where(x => x.UserId == userId)
.Select(x => new ItemOverviewDto()
{
Id = x.Id,
Name = x.Name,
ReplenishmentPeriod = x.ReplenishmentPeriod,
NextReplenishmentDate = x.NextReplenishmentDate,
LastReplenishmentDate = x.Purchases
.OrderByDescending(y => y.ReplenishmentDate)
.Select(m => (DateTime?)m.ReplenishmentDate)
.FirstOrDefault(),
LastReplenishmentQuantity = x.Purchases
.OrderByDescending(y => y.ReplenishmentDate)
.Select(m => (int?)m.Quantity)
.FirstOrDefault(),
});
return query;
}
這是回購。
我建立了查詢并稍后將其具體化。當我實作它時 - 我使用 ToListAsync(); 但我想知道這部分 - “.Select(m => (int?)m.Quantity).FirstOrDefault(),”也可以以某種方式異步嗎?
PS Select 回傳一個 IEnumerable 而不是 IQueryable 所以我們不能馬上使用“.FirstOrDefaultAsync()”。
uj5u.com熱心網友回復:
當您執行基于 SQL 的 Linq(如 EF)查詢時,整個查詢將轉換為 SQL,然后執行。在您的示例中,FirstOrDefault只是告訴查詢生成器如何制定 SQL。它沒有在“主”查詢中運行單獨的查詢。
因此,當您呼叫 時ToListAsync,整個查詢將轉換為 SQL 并異步執行。也無需嘗試將內部查詢轉換為異步。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/380492.html
上一篇:按陣列元素對Linq串列進行排序
