序列不包含匹配元件,FirstOrDefault
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()方法在哪里我将处理空结果。 我该怎么做?
您可以在线做到这一点:
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;
}
+1 LINQ用于查询,而不是编辑。由于OP正在改变数据,所以'foreach' +'if'在这里更合适。 – 2012-02-02 16:40:44
第一个选项给出编译错误: 并非所有代码路径都在类型为'System.Func
我已经更新了第一个编译,对此抱歉。 – 2012-02-02 17:00:03
的问题可能有点傻,但我不知道要搜索的话题? – Anwar 2012-02-02 16:31:46