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

本文关键字:检查 失败 设置 默认值 集合 表达式 用于 LINQ 合并 | 更新日期: 2023-09-27 18:33:51

我有一个像这样的 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;

只要用户请求上的"状态"属性是四个属性之一,就可以正常工作。当它不是四个时,它将抛出一个空异常。

在这种情况下,msStatus 应设置为"新建",第一个选项,当要检查的值时因为不是四个中的一个。

我该如何处理?

提前谢谢。

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

只需将结果存储到变量中并检查 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;
}

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

var statusItem = msStatus.FirstOrDefault(m => m.Value == UserRequest.Status.ToString())
if (statusItem != null)
{
  // here you canaccess statusItem.Selected safety
}
您可以

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

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

如果Value为空或为空,则将其忽略。

你可以让一个标志是否匹配,然后你可以设置它::

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());
}