IQueryable不包含GetAwaiter的定义

nos*_*os9 3 c# linq entity-framework

我在实体框架中使用WebAPI来创建新端点,我遇到了一些问题.我正在尝试使用Linq Where语句来获取我的数据,但是我收到以下错误.

'IQueryable'不包含'GetAwaiter'的定义,并且没有扩展方法'GetAwaiter'接受类型'IQueryable'的第一个参数可以找到(你是否缺少using指令或汇编引用?)

这是我的代码.

    [ResponseType(typeof(Vocab))]
    public async Task<IHttpActionResult> GetVocabByLesson(int lessonId)
    {
        Vocab vocab = await db.Vocabs.Where(a => a.LessonId == lessonId);
        if (vocab == null)
            return NotFound();

        return Ok(vocab);
    }
Run Code Online (Sandbox Code Playgroud)

oct*_*ccl 16

使用FirstOrDefaultAsync扩展方法:

[ResponseType(typeof(Vocab))]
public async Task<IHttpActionResult> GetVocabByLesson(int lessonId)
{
        Vocab vocab = await db.Vocabs.FirstOrDefaultAsync(a => a.LessonId == lessonId);
        if (vocab == null)
            return NotFound();

        return Ok(vocab);
}
Run Code Online (Sandbox Code Playgroud)

通过你的代码我可以扣除你想要只返回一个元素,这就是我建议使用的原因FirstOrDefaultAsync.但是如果你想获得满足某些条件的多个元素,那么使用ToListAsync:

[ResponseType(typeof(Vocab))]
public async Task<IHttpActionResult> GetVocabByLesson(int lessonId)
{
        var result= await db.Vocabs.Where(a => a.LessonId == lessonId).ToListAsync();
        if (!result.Any())
            return NotFound();

        return Ok(result);
}
Run Code Online (Sandbox Code Playgroud)