У меня есть проблема, чтобы решить, какой способ лучше всего запросить мой SQL Server на моем WebAPI 2 Backend
Я пытаюсь использовать async / await как можно чаще, но я обнаружил, что когда я возвращаювсей коллекции, асинхронная опция недоступна.
Какой путь будет лучшим?
[ResponseType(typeof(List<ExposedPublisher>))]
[HttpGet]
public async Task<IHttpActionResult> GetPublisher()
{
var list = new List<PublisherWithMedia>();
foreach (var publisher in _db.Publisher.Where(e => e.IsDeleted == false))
{
var pub = new PublisherWithMedia()
{
Id = publisher.Id,
Name = publisher.Name,
Mediae = new List<WebClient.Models.Media>()
};
foreach (var media in publisher.Media)
{
pub.Mediae.Add(ApiUtils.GetMedia(media));
}
list.Add(pub);
}
return Ok(list);
}
или
[ResponseType(typeof(List<PublisherWithMedia>))]
[HttpGet]
public async Task<IHttpActionResult> GetPublisher()
{
var list = new List<PublisherWithMedia>();
var entity = await _db.Publisher.ToListAsync();
foreach (var publisher in entity.Where(e => e.IsDeleted == false))
{
var pub = new PublisherWithMedia()
{
Id = publisher.Id,
Name = publisher.Name,
Mediae = new List<WebClient.Models.Media>()
};
foreach (var media in publisher.Media)
{
pub.Mediae.Add(ApiUtils.GetMedia(media));
}
list.Add(pub);
}
return Ok(list);
}
Операция может потенциально привести кочень большой набор результатов, поэтому имеет смысл фильтровать непосредственно по базе данных, особенно потому, что со временем количество удаленных записей может превысить количество неподтвержденных.Однако, с большим результатом и запросом потомков (Media), также имеет смысл заставить операцию работать асинхронно, так как она должна быть довольно трудоемкой.К сожалению, в этом контексте нет асинхронного Where()
.
Или есть третий способ, о котором я не знаю?