为了账号安全,请及时绑定邮箱和手机立即绑定

entity.ToListAsync().Where 或 entity.Where()?

entity.ToListAsync().Where 或 entity.Where()?

C#
弑天下 2021-07-04 09:42:32
我很难决定哪种方式最适合在我的 WebAPI 2 后端查询我的 SQL Server我试图尽可能多地使用 async/await,但我发现当我返回整个集合时,没有可用的 async 选项。哪种方式最好?[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()在这种情况下没有异步。还是有我不知道的第三种方式?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信