【问题标题】:How to use Await with LINQ and DTO如何将 Await 与 LINQ 和 DTO 一起使用
【发布时间】:2017-07-15 09:46:18
【问题描述】:

我刚刚开始着手在 ASP.NET 中创建一个新的 WebAPI2 项目。我试图让控制器从我创建的 DTO 返回数据,而不是 EF 创建的原始对象类。我一直在关注a tutorial on Microsoft Docs,并获得了返回所有记录以使用 DTO 工作的方法,但我无法弄清楚如何正确修改仅返回 ID 与传递的参数匹配的记录的方法异步任务,就像默认方法一样。

Visual Studio 生成的默认方法如下所示:

[ResponseType(typeof(Post))]
public async Task<IHttpActionResult> GetPost(int id)
{
    Post post = await db.Post.FindAsync(id);
    if (post == null)
    {
        return NotFound();
    }

    return Ok(post);
}

我的修改后的方法如下所示:

[ResponseType(typeof(PostDTO))]
public async Task<IHttpActionResult> GetPost(int id)
{
    var _post = from p in db.Post
                where p.PostID == id
                select new PostDTO()
                {
                    PostID = p.PostID,
                    SubmitTime = p.SubmitTime,
                    SubmitUsername = p.SubmitUsername,
                 };
     if (_post == null)
     {
        return NotFound();
     }

     return Ok(_post);
}

这种方法工作得很好,但正如您所见,它没有利用 .NET 的 Await/Async 功能来异步执行查询。老实说,我承认我实际上并不知道这是否重要,但我觉得如果默认方法是异步的,我的也应该如此。我只是不知道在哪里插入 AsyncAwait 关键字来完成这项工作。

【问题讨论】:

    标签: asp.net asp.net-web-api async-await asp.net-web-api2


    【解决方案1】:

    你可以用这个方法,

    [ResponseType(typeof(PostDTO))]
     public async Task<IHttpActionResult> GetPost(int id)
     {
         var _post = await (from p in db.Post
                        where p.PostID == id
                        select new PostDTO()
                        {
                            PostID = p.PostID,
                            SubmitTime = p.SubmitTime,
                            SubmitUsername = p.SubmitUsername,
                        }).ToListAsync();
    
            if (_post == null)
            {
                return NotFound();
            }
    
            return Ok(_post);
     }
    

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多