如果FirstOrDefault返回null,则返回列表中的第一项

本文关键字:返回 一项 null FirstOrDefault 列表 如果 | 更新日期: 2023-09-27 18:25:35

我有一个产品的List,我需要从列表中获取具有特定产品Id的项目,该项目是我从querystring参数中获得的。但是,我可能并不总是有产品Id传递给我。如果我没有产品Id,我需要默认为列表中的第一个产品。

目前我有:

@Model.Products.FirstOrDefault(x => x.Id == productId);

这只是选择具有特定Id的产品,如果没有,则默认为null

有办法实现我想要的吗?

如果FirstOrDefault返回null,则返回列表中的第一项

听起来你想要:

var product = productId == null ? Model.Products.FirstOrDefault()
                    : Model.Products.FirstOrDefault(x => x.Id == productId);
...
@product

或者你的意思是:

@(Model.Products.FirstOrDefault(x => x.Id == productId) ??
             Model.Products.FirstOrDefault())

如果尝试这样的操作会发生什么?

@if (productId != null) // assuming it's nullable
{
  @Model.Products.FirstOrDefault(x => x.Id == productId)
} 
else 
{
  @Model.Products.FirstOrDefault()
}

我知道这看起来可能有点麻烦,但很清楚它在做什么(想想如果其他人必须维护它),它应该会起作用。

但实际上,我可能更愿意在ViewModel中设置它,然后访问我知道正确的值。

嘿,检查一下它可能会帮助你

MSDN链接:http://msdn.microsoft.com/en-us/library/bb340482.aspx

List<int> months = new List<int> { };
            // Setting the default value to 1 after the query.
            int firstMonth1 = months.FirstOrDefault();
            if (firstMonth1 == 0)
            {
                firstMonth1 = 1;
            }
            Console.WriteLine("The value of the firstMonth1 variable is {0}", firstMonth1);
            // Setting the default value to 1 by using DefaultIfEmpty() in the query.
            int firstMonth2 = months.DefaultIfEmpty(1).First();
            Console.WriteLine("The value of the firstMonth2 variable is {0}", firstMonth2);
            /*
             This code produces the following output:
             The value of the firstMonth1 variable is 1
             The value of the firstMonth2 variable is 1
            */