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双问号是什么意思?!”所以有时候阻力最小的方法是最简单的…)。