我很难决定在我的WebAPI 2后端上查询Server的最佳方式
我试图尽可能频繁地使用异步/等待,但我发现当我返回整个集合时,没有任何异步选项可用。
哪条路是最好的?
[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);
}该操作可能会导致非常大的结果集,因此直接在数据库上进行筛选是有意义的,特别是因为随着时间的推移,删除的记录数量可能超过未删除的记录的数量。然而,随着运算结果的增加和子(媒体)的查询,异步操作也是很有意义的,因为它需要相当长的时间。遗憾的是,在这个上下文中没有异步Where()。
还是还有第三条路我不知道?
发布于 2018-05-28 15:45:32
您可以兼得这两个方面的优点:在数据库中筛选并异步执行查询:
var publishers = await _db.Publisher
.Where(e => !e.IsDeleted)
.ToListAsync();尽管如此,根据ApiUtils.GetMedia(media)的功能,您甚至可以在查询上执行投影:
var publishers = await _db.Publisher
.Where(e => !e.IsDeleted)
.Select(e => new PublisherWithMedia()
{
Id = e.Id,
Name = e.Name,
Mediae = e.Mediae.Select(m => ApiUtils.GetMedia(m)).ToList()
};
.ToListAsync();https://stackoverflow.com/questions/50569734
复制相似问题