Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果FirstOrDefault返回null,则返回列表中的第一项_C#_Asp.net Mvc_Linq - Fatal编程技术网

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

C# 如果FirstOrDefault返回null,则返回列表中的第一项,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个产品的列表,我需要从列表中获取一个特定的产品Id,我从querystring参数中获取该产品。但是,我可能并不总是将产品Id传递给我。如果我没有产品Id,我需要默认为列表中的第一个产品 目前我有: @Model.Products.FirstOrDefault(x => x.Id == productId); 这只是选择具有特定Id的产品,如果没有,它将默认为null 有什么方法可以实现我想要的吗?嘿,检查一下这个,它可能会对你有所帮助 MSDN链接: 列表月份=新列表{}; //

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

目前我有:

@Model.Products.FirstOrDefault(x => x.Id == productId);
这只是选择具有特定
Id
的产品,如果没有,它将默认为
null


有什么方法可以实现我想要的吗?

嘿,检查一下这个,它可能会对你有所帮助

MSDN链接:

列表月份=新列表{};
//查询后将默认值设置为1。
int firstMonth1=months.FirstOrDefault();
如果(firstMonth1==0)
{
firstMonth1=1;
}
WriteLine(“firstMonth1变量的值为{0}”,firstMonth1);
//在查询中使用DefaultIfEmpty()将默认值设置为1。
int firstMonth2=months.DefaultIfEmpty(1.First();
WriteLine(“firstMonth2变量的值为{0}”,firstMonth2);
/*
此代码生成以下输出:
firstMonth1变量的值为1
firstMonth2变量的值为1
*/

嘿,检查一下这个,它可能会对你有所帮助

MSDN链接:

列表月份=新列表{};
//查询后将默认值设置为1。
int firstMonth1=months.FirstOrDefault();
如果(firstMonth1==0)
{
firstMonth1=1;
}
WriteLine(“firstMonth1变量的值为{0}”,firstMonth1);
//在查询中使用DefaultIfEmpty()将默认值设置为1。
int firstMonth2=months.DefaultIfEmpty(1.First();
WriteLine(“firstMonth2变量的值为{0}”,firstMonth2);
/*
此代码生成以下输出:
firstMonth1变量的值为1
firstMonth2变量的值为1
*/

如果您尝试这样的方法会发生什么

@if (productId != null) // assuming it's nullable
{
  @Model.Products.FirstOrDefault(x => x.Id == productId)
} 
else 
{
  @Model.Products.FirstOrDefault()
}
我知道这看起来有点麻烦,但很清楚它在做什么(想想是否有其他人必须维护它),它应该可以工作


但实际上,我可能宁愿在
视图模型中设置它,然后只访问我知道正确的值。

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

@if (productId != null) // assuming it's nullable
{
  @Model.Products.FirstOrDefault(x => x.Id == productId)
} 
else 
{
  @Model.Products.FirstOrDefault()
}
我知道这看起来有点麻烦,但很清楚它在做什么(想想是否有其他人必须维护它),它应该可以工作


但实际上,我可能宁愿在
视图模型中设置它,然后只访问我知道正确的值。

听起来像是您想要:

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

听起来你想要:

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

+1我想我更喜欢你答案的第二部分而不是我的(事实上我可能会这样编码,特别是如果我知道我将不得不维护它,但我曾与一些人合作过,他们会说“WTF双问号意味着什么?!”所以有时候阻力最小的方法最简单……).+1我想我更喜欢你答案的第二部分而不是我的(事实上我可能会这样编码,特别是如果我知道我将不得不维护它,但我与一些人合作过,他们会说“WTF双问号是什么意思?!”所以有时候阻力最小的方法是最简单的…)。