2017-09-13 3 views
0

データベースで検索されたデータを簡単に選択して検索しました。私の場合、データベースに項目がない場合、メソッドは空のJSONを返します。検索選択しないNotFoundメソッド

[Route("api/Atributes/{value}")] 
public IHttpActionResult GetAtributeByValue(string value) 
{ 
    var atribute = (from a in db.Atributes 
        join p in db.Cards on a.Atr_Nr equals p.Card_Nr 
        where a.Atr_Value == value 
        select new Employee 
        { 
         Name = p.Name, 
         Surname = p.Surname, 
         Number = a.Atr_Value 
        }); 

//this is statement id not working 
    if (atribute == null) 
    { 
     return NotFound(); 
    } 

    return Ok(atribute); 
} 

質問:この検索方法は正しいですか?他の方法でどうすればいいですか?

答えて

3

結果セットをListに変換し、lengthプロパティを使用してチェックします。 LINQは実行を延期しました。 .ToList()で実際の結果セットを取得します。

[Route("api/Atributes/{value}")] 
public IHttpActionResult GetAtributeByValue(string value) 
{ 
    var atribute = (from a in db.Atributes 
        join p in db.Cards on a.Atr_Nr equals p.Card_Nr 
        where a.Atr_Value == value 
        select new Employee 
        { 
         Name = p.Name, 
         Surname = p.Surname, 
         Number = a.Atr_Value 
        }).ToList(); 

//use count, if that does not work, length here 
    if (atribute.Count() == 0) 
    { 
     return NotFound(); 
    } 

    return Ok(atribute); 
} 
+0

ありがとうございました。 Works完璧;) –

+0

'ToList()'を使用している場合は、シーケンス全体を繰り返し処理するので、 'Count()'を使うのは無駄です。 'Count'プロパティを使うべきです。 –

+0

IEnumerableにcountプロパティがありますか?また、最終的にデータを返さなければなりません。 – Amit

0

このように、メソッドがAtributeのリストを作成しようとしているようです。 なぜ404(見つかりません):だから、あなただけEDIT直接atribute

[Route("api/Atributes/{value}")] 
public IHttpActionResult GetAtributeByValue(string value) 
{ 
var atribute = (from a in db.Atributes 
       join p in db.Cards on a.Atr_Nr equals p.Card_Nr 
       where a.Atr_Value == value 
       select new Employee 
       { 
        Name = p.Name, 
        Surname = p.Surname, 
        Number = a.Atr_Value 
       }); 

    return Ok(atribute); 
} 

を返しますか?

404ステータスコードは、リソースが見つからない場合に予約する必要があります。この場合、あなたのリソースはAtributeのコレクションです。このコレクションは存在しますが、現在は空です。誰かが2つのアトリビュートを削除しただけなので、私は200の日と404の翌日を得たなら、あなたのアプリケーションのクライアントの作者として非常に混乱しています。私はどうしたらいいですか? URLが間違っていますか?誰かがAPIを変更して、リダイレクトを残すことを怠ったのですか?

+0

私には、NotFound HTTPエラーコードを返したいと思っています。 – Amit

関連する問題