这是在使用 async 的同时使用 foreach 循环的正确方法吗?有没有更好更高效的方法呢? IAsyncEnumerable? (忽略两个表可以连接在一起的事实,这是一个简单的示例)
public async Task<IList<ContactAndAccounts>> GetAll()
{
var accounts = await _dbContext.Account.Where(x => x.Name == "Amazing").ToListAsync();
foreach(var account in accounts)
{
accounts.Contacts = await GetContact(account.Id);
}
return accounts;
}
public async Task<IList<contact>> GetContact(Guid id)
{
return await _dbContext.Contact.Where(x => x.AccountLinkId = id).ToListAsync();
}
最佳答案
我同意Johnathan Barclay's answer但会说,从数据库的角度来看,您可能会发现执行单个查询大查询比执行大量小查询更快。
执行一次查询并传入所有 ID 通常比多个单独的查询便宜。
public async Task<IList<ContactAndAccounts>> GetAll()
{
var accounts = await _dbContext.Account.Where(x => x.Name == "Amazing").ToListAsync();
var contacts = await GetContacts(accounts.Select(o => o.Id));
// Map contacts to accounts in memory
return accounts;
}
public async Task<IList<contact>> GetContacts(List<Guid> ids)
{
return await _dbContext.Contact.Where(x => ids.Contain(x.AccountLinkId)).ToListAsync();
}
关于c# - 在 foreach 循环中等待的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59984516/