IQueryable does not contain definition for GetAwaiter

感情迁移 提交于 2020-01-13 16:23:31

问题


I'm using WebAPI in entity framework to create a new endpoint and I am having some issues. I'm trying to use a Linq Where statement to get my data, but I'm receiving the following error.

'IQueryable' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'IQueryable' could be found (are you missing a using directive or an assembly reference?)

Here is my code.

    [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);
    }

回答1:


Use FirstOrDefaultAsync extension method:

[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);
}

By your code I can deduct you want to return just an element, that's why I have suggested to use FirstOrDefaultAsync. But in case you want to get more than one element that meets some condition then use 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);
}


来源:https://stackoverflow.com/questions/40978098/iqueryable-does-not-contain-definition-for-getawaiter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!