检查集合的LINQ表达式,并在检查失败时设置默认值

时间:2014-12-10 09:36:21

标签: c# linq

我有一个像这样的SelectedListItem:

private List<SelectListItem> GetStatus()
{
    List<SelectListItem> msStatuses = new List<SelectListItem>() { 
        new SelectListItem() { Text = "New", Value = "50342"},
        new SelectListItem() { Text = "In Process", Value = "50343"},
        new SelectListItem() { Text = "Approved", Value = "50345"},
        new SelectListItem() { Text = "Rejected", Value = "50344"}};

    return msStatuses;
}

使用传入值检查,并在找到匹配项时将msStatus设置为相同:

msStatus.Find(m => m.Value == UserRequest.Status.ToString()).Selected = true;

只要&#39;状态&#39; UserRequest上的属性是四个中的一个。 如果它不是四个,它将抛出一个空的异常。

在这种情况下,当要检查的值时,应将msStatus设置为&#39; New&#39;,第一个选项 因为不是四个中的一个。

我该如何处理?

提前致谢。

4 个答案:

答案 0 :(得分:1)

只需将结果存储到变量中并检查null

var item = msStatus.Find(m => m.Value == UserRequest.Status.ToString());

if(item == null)
{
    // set selected item to New
    msStatus.Find(m => m.Value == "New").Selected = true; 
}
else 
{
    item.Selected = true;
}

答案 1 :(得分:1)

尝试使用FirstOrDefault,如果它不存在,将返回null。

var statusItem = msStatus.FirstOrDefault(m => m.Value == UserRequest.Status.ToString())

if (statusItem != null)
{
  // here you canaccess statusItem.Selected safety
}

答案 2 :(得分:-1)

您可以检查Value的空值或空值,如下所示:

(m => String.IsNullOrEmpty(Value) || m.Value == UserRequest.Status.ToString());

如果Value为空或为null,则会被忽略。

答案 3 :(得分:-1)

你可以制作一个标志,无论它是否匹配;然后你可以设置它::

bool IsstatusPresent= msStatus.Any(x=>m.Value == UserRequest.Status.ToString());

if(!IsstatusPresent)
{
   return msStatus.Find(m => m.Value == "New").Selected;
}
else 
{
   return  msStatus.Find(x=>m.Value == UserRequest.Status.ToString());
}