首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >entity.ToListAsync().Where还是entity.Where()?

entity.ToListAsync().Where还是entity.Where()?
EN

Stack Overflow用户
提问于 2018-05-28 15:41:02
回答 1查看 3.9K关注 0票数 1

我很难决定在我的WebAPI 2后端上查询Server的最佳方式

我试图尽可能频繁地使用异步/等待,但我发现当我返回整个集合时,没有任何异步选项可用。

哪条路是最好的?

代码语言:javascript
复制
[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);
}

代码语言:javascript
复制
[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()

还是还有第三条路我不知道?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 15:45:32

您可以兼得这两个方面的优点:在数据库中筛选并异步执行查询:

代码语言:javascript
复制
var publishers = await _db.Publisher
    .Where(e => !e.IsDeleted)
    .ToListAsync();

尽管如此,根据ApiUtils.GetMedia(media)的功能,您甚至可以在查询上执行投影:

代码语言:javascript
复制
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();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50569734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档