【问题标题】:IQueryable does not contain definition for GetAwaiterIQueryable 不包含 GetAwaiter 的定义
【发布时间】:2017-04-20 01:45:08
【问题描述】:

我在实体框架中使用 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);
    }

【问题讨论】:

  • 好吧,你为什么认为这没问题?您如何期望Where 的结果可以等待?你什么时候期望结果是null? (Where 返回一个序列 - 可能为空,但绝不为空......)

标签: c# entity-framework linq


【解决方案1】:

使用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);
}

通过您的代码,我可以推断出您只想返回一个元素,这就是我建议使用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);
}

【讨论】:

  • 虽然这有效,但它只返回一条记录。这就是为什么我想使用 where 语句来返回所有匹配的行。
  • 看看我在解决方案中添加了什么,希望对您有所帮助
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 2017-11-20
  • 2018-08-21
  • 2016-12-15
  • 2017-04-08
  • 1970-01-01
  • 2023-01-09
  • 2020-08-21
相关资源
最近更新 更多