2016-12-05 97 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'は空であるかもしれないが、決してヌルではないシーケンスを返します...) –

答えて

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

これは機能しますが、1つのレコードしか返しません。それで、なぜwhereステートメントを使って、一致したすべての行を返すかを考えたかったのです。 – nos9

+0

私のソリューションに何が追加されたか見てみましょう。 – octavioccl

関連する問題