C# 不能等待”;ProjectName.Models.Class“;

C# 不能等待”;ProjectName.Models.Class“;,c#,async-await,C#,Async Await,我正在尝试使用DTO从数据库中检索一些数据。我在课堂上遵循一个指导示例,但出于某种原因,它并没有等待我的课。这是一段代码 // GET api/Orders/5 [ResponseType(typeof(OrderDetailDTO))] public async Task<IHttpActionResult> GetOrder(int id) { var order = await db.Orders.Include(o =>o.drug). Include(

我正在尝试使用DTO从数据库中检索一些数据。我在课堂上遵循一个指导示例,但出于某种原因,它并没有等待我的课。这是一段代码

// GET api/Orders/5
[ResponseType(typeof(OrderDetailDTO))]
public async Task<IHttpActionResult> GetOrder(int id)
{
    var order = await db.Orders.Include(o =>o.drug).
    Include(o=>o.patient).Include(o => o.doctor).Select(o => new OrderDetailDTO()
    {
        Id = o.Id,
        instruction = o.instruction,
        quantity = o.quantity,
        totalPrice = o.totalPrice,
        patientName = o.patient.name,
        doctorName = o.doctor.name,
        drugName = o.drug.drugName

    }).SingleOrDefault(o => o.Id == id);
    if(order == null)
    {
        return NotFound();
    }
    return Ok(order);
}
但它只允许SingleOrDefault。我已经仔细检查了我的使用字段,但没有特别的错误

编辑:谢谢你的回复!我已经解决了我的问题


我了解到我需要使用SingleOrDefaultAsync返回一个等待的对象。SingleOrDefaultAsync需要EF6。

当然,您不能等待
db…SingleOrDefault(…)
SingleOrDefault
是同步的,返回实际的非任务对象

您需要在此处使用
SingleOrDefaultAsync(…)
,以便能够等待它


为什么你不能使用它是另一个问题,但这是你应该问自己的问题。你们有必要的进口货吗?例如,
System.Data.Entity

它不等待我的课。。发生了什么?您使用的是什么版本的实体框架?我想异步需要EF6。啊,我的是5。根据intsalled packages.6下的Nuget软件包管理器,谢谢!是的,我很确定我有。使用制度;使用System.Collections.Generic;使用系统数据;使用System.Data.Entity;使用System.Data.Entity.Infrastructure;使用System.Linq;Net系统;使用System.Net.Http;使用System.Web;使用System.Web.Http;使用DoctorOrderService.Models;使用System.Threading.Tasks;使用System.Web.Http.Description;如果它用于SingleOrDefaultAsync:'System.Linq.IQueryEnable如果它用于Wait,则:struct System.Void为不返回值Cannot Wait'DoctorOrderService.Models.OrderDetailDTO的方法指定返回值类型
}).SingleOrDefaultAsync(o => o.Id == id);