Sequence不包含匹配元素FirstOrDefault

Anw*_*war 0 c# linq

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);
 }
Run Code Online (Sandbox Code Playgroud)

上面的代码找到一个给定ID的设备,然后设置DropDownList 如果 secondValue有一个值,如果没有则跳过.

代码工作正常,但在许多控制器中的许多操作中,我必须设置IF 条件来检查xxxValue是否确实具有值.

我不能直接这样做:

record.secondSelectList.FirstOrDefault(i => i.Value == record.secondValue.ToString()).Selected = true;
Run Code Online (Sandbox Code Playgroud)

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

好的,我的问题是如何设置DropDownList而不需要使用If条件?

我想,而不是使用FirstOrDefault(),我将使用SetSelected().

record.secondSelectList.SetSelected(i => i.Value == record.secondValue.ToString());
Run Code Online (Sandbox Code Playgroud)

SetSelected()方法在哪里我将处理null结果.我怎样才能做到这一点?

Chr*_*ain 5

你可以内联:

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

或者,可能更清楚:

foreach (var listItem in record.secondSelectList) {
    if (listItem.Value == record.secondValue.ToString()) 
        listItem.Selected = true;
}
Run Code Online (Sandbox Code Playgroud)