2016-11-06 71 views
0

我如何第一或默認添加到我的控制器:將FirstOrDefault添加到我的查詢中?

public ActionResult Index(string searchString) 
{ 
    var customers = from s in db.TicketDetails 
        select s; 

    if (!String.IsNullOrEmpty(searchString)) 
    { 
     //search criteria 
     customers = customers.Where(s => s.SupportRef.Contains(searchString)); 
    } 
    return View(db.TicketDetails.ToList()); 
} 

我需要知道我的結果只返回1個記錄。如果他們返回null那麼我需要傳入虛擬值。

+0

澄清你想要的回報。客戶還是集合的第一個入口? – Tinwor

+0

我想讓用戶搜索一個ID的表單,然後我的查詢應該找到記錄。一旦找到了我想在文本框中顯示該行值的記錄。 – PriceCheaperton

+0

如果'searchString'爲null會發生什麼?那你想要什麼? –

回答

2

確保從查詢中返回了多少項。

  • 如果超過2則返回默認值。
  • 如果修女返回您的默認值。
  • 如果返回的項目爲null,則返回默認值。
  • 否則,你有你的集合中的一個有效的項目,並返回它:

總之,你可以這樣寫:

public ActionResult Index(string searchString) 
{ 
    var defaultReturnValue = //you default dummy object 

    if(String.IsNullOrEmpty(searchString)) 
     return View(defaultReturnValue); 

    var customers = (from s in db.TicketDetails 
        where s.SupportRef.Contains(searchingString) 
        select s).Take(2).ToList(); // execute query here so not to execute it twice 

    return View(customers.Count > 1 ? defaultReturnValue : 
             customers.FirstOrDefault() ?? defaultReturnValue); 
} 

我已經添加了Take(2)所以生成的查詢將會佔用2條記錄,因此,如果有多條記錄,它仍然不會帶來所有這些記錄。

+0

感謝您的信息!我得到以下錯誤,因爲我沒有正確顯示值: '傳入字典的模型項目類型爲'SignalRChat.Models.TicketDetail',但該字典需要類型爲「System.Collections.Generic」的模型項目。 IEnumerable'1 [SignalRChat.Models.TicketDetail]'。' – PriceCheaperton

+0

是的,因爲你的模型仍然是'IEnumerable '而不是一個'T'。如果你知道你只想要一個項目,就像你上面說的那樣,然後將它從一個集合改爲一個'T' –

+1

我使用這個來修復它:'@model SignalRChat.Models.TicketDetail' – PriceCheaperton