【发布时间】:2016-10-24 17:47:15
【问题描述】:
我正在尝试使用 Entity Framework 从表执行 Lambda Select 到新模型,但我需要能够调用异步方法来填充返回集中每个实例的属性:
await Task.WhenAll(_context.UserContacts.Where(uc => uc.UserId == user.Id).Select(async uc => new MailContact
{
Email = uc.Contact.Email,
UserId = uc.Contact.UserId,
ContactId = uc.Contact.Id,
Name = uc.Contact.UserId != null ? await _graphService.GetUserByIdAsync(uc.Contact.UserId) : null;
}
我了解 Linq 对 await/async 的支持有限,并且我查看了 StackOverflow 上的其他几个示例,其中异步部分被移动到单独的循环中,例如:
How to await a method in a Linq query
T[] data = await Task.WhenAll(contacts.Select(c => LoadDataAsync(c)));
但是,除非我通过引用传递,否则此方法不会让我更新称为“c”的对象,这在异步方法中是不允许的。
有人可以解释正确填充 name 属性的最有效方法吗?
【问题讨论】:
标签: c# lambda async-await