2017-09-13 108 views
0

我寫了一個簡單的select來查找數據庫中的搜索數據。事情是,在我的情況下,當數據庫中沒有項目時,方法返回一個空的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

將您的結果集轉換爲列表並使用其長度屬性進行檢查。 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

謝謝。完美的作品;) –

+0

如果你使用'ToList()',那麼使用'Count()'是無用的,因爲它會迭代整個序列。你應該使用'Count'屬性。 –

+0

IEnumerable有count屬性嗎?另外,他必須最終返回數據。 – Amit

0

看起來像這樣的方法是嘗試一個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(未找到)?

404狀態碼應該保留用於未找到資源的情況。在這種情況下,您的資源是Atribute的集合。這個集合存在,但它目前是空的。如果我有一天有200天,而第二天有404則是因爲某人碰巧刪除了一些Atributes,所以作爲您的應用程序的客戶端的作者非常困惑。我應該做些什麼?我的網址錯了嗎?有人更改了API並忽略了重定向。

+0

對我來說,他想要返回一個NotFound HTTP錯誤代碼。 – Amit