2016-12-05 206 views
0

我在實體框架中使用WebAPI來創建一個新的端點,我遇到了一些問題。我正在嘗試使用Linq Where語句來獲取我的數據,但我收到以下錯誤。IQueryable不包含GetAwaiter的定義

「的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); 
    } 
+2

那麼,你爲什麼想到要好嗎?你如何期待'Where'的結果是可以等待的?你什麼時候期望結果是'空'? ('Where'返回一個序列 - 它可能是空的,但它永遠不會爲空......) –

回答

3

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

雖然這可行,但它只返回一條記錄。這就是爲什麼我想使用where語句返回匹配的所有行。 – nos9

+0

看看我已經添加到我的解決方案,希望這可以幫助你 – octavioccl