2012-02-02 64 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

相关问题