繁体   English   中英

序列不包含匹配元素,FirstOrDefault

[英]Sequence contains no matching element, 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具有值),否则将其跳过。

该代码可以正常工作,但是在许多控制器中的许多动作中,我必须放置IF条件,以检查xxxValue是否确实具有值。

我不能直接这样做:

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

因为FirstOrDefault在任何时候都可能返回null引用,由于使用了.Selected属性,该引用将立即引发异常。

好的,我的问题是如何在不使用If条件的情况下设置DropDownList?

我想象不是使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM