2012-02-02 104 views
0
public ActionResult Update(string id) 
{ 
    Device record = new Device(); // OK 
    record = record.Find(new Guid(id), service); // OK 

    if (record.secondValue.HasValue) // <--- 
      record.secondSelectList.FirstOrDefault(i => i.Value == record.secondValue.ToString()).Selected = true; 
    return View(record); 
} 

上面的代碼在設備中發現對於給定的ID,然後設置將DropDownList 如果secondValue具有值,如果不是則跳過。序列不包含匹配元件,FirstOrDefault

代碼工作完美,但在許多控制器許多動作我必須把一個IF條件,以檢查是否xxxValue確實有一個值。

我不能直接這樣做:

record.secondSelectList.FirstOrDefault(i => i.Value == record.secondValue.ToString()).Selected = true; 

因爲隨時可能FirstOrDefault返回一個空引用,這將立即將拋出,因爲使用.Selected財產的異常。

好的,我的問題是如何設置DropDownList而不需要使用If條件?

我想代替使用FirstOrDefault(),我會使用SetSelected()。

record.secondSelectList.SetSelected(i => i.Value == record.secondValue.ToString()); 

SetSelected()方法在哪裏我將處理空結果。 我該怎麼做?

+0

的問題可能有點傻,但我不知道要搜索的話題? – Anwar 2012-02-02 16:31:46

回答

5

您可以在線做到這一點:

record.secondSelectList.FirstOrDefault(i => { if (i.Value == record.secondValue.ToString()) { i.Selected = true; return true; } return false; }); 

或者,可能更清楚:

foreach (var listItem in record.secondSelectList) { 
    if (listItem.Value == record.secondValue.ToString()) 
     listItem.Selected = true; 
} 
+0

+1 LINQ用於查詢,而不是編輯。由於OP正在改變數據,所以'foreach' +'if'在這裏更合適。 – 2012-02-02 16:40:44

+0

第一個選項給出編譯錯誤: 並非所有代碼路徑都在類型爲'System.Func '的lambda表達式中返回一個值。對於第二個選項,我看到更多的聲明不像上面的原始代碼在我的問題。我的意思是如果解決方案是使用foreach,那麼我會更好地堅持If條件。 – Anwar 2012-02-02 16:50:31

+0

我已經更新了第一個編譯,對此抱歉。 – 2012-02-02 17:00:03

相關問題