Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Asp.net mvc 如何使用FirstOrDefault()?_Asp.net Mvc_Linq - Fatal编程技术网

Asp.net mvc 如何使用FirstOrDefault()?

Asp.net mvc 如何使用FirstOrDefault()?,asp.net-mvc,linq,Asp.net Mvc,Linq,我有以下代码,我想在表达式不返回数据时将值设置为Viewdate: ViewData["Fix"] = db.PreStatusViws.Where(c => c.LkpNameFix == "1").FirstOrDefault().NumCoefficientFix; 我可以为它设置零或“文本”吗?我不,我能做什么?! 注意:FirstOrDefault(null)会导致错误。Default将返回数据类型的默认值。如果该位置的数据类型是引用类型(例如字符串),则默认值将始终为null

我有以下代码,我想在表达式不返回数据时将值设置为Viewdate:

ViewData["Fix"] = db.PreStatusViws.Where(c => c.LkpNameFix == "1").FirstOrDefault().NumCoefficientFix;
我可以为它设置零或“文本”吗?我不,我能做什么?!
注意:FirstOrDefault(null)会导致错误。

Default将返回数据类型的默认值。如果该位置的数据类型是引用类型(例如字符串),则默认值将始终为null,因此下面的.numCoeficientFix成员将抛出NullReferenceException

默认值内置于.NET中,不可更改,如果结果集不包含任何值,则始终会给出默认值


@Mikey已经在他的回答中给出了我建议的代码示例

如果我正确理解您的问题,以下代码应该可以解决您的问题:

var p = db.PreStatusViws.Where(c => c.LkpNameFix == "1").FirstOrDefault(); 
if(p != null)
    ViewData["Fix"] = p.NumCoefficientFix;
else
    ViewData["Fix"] = 0;

如果首先选择数值列,FirstOrDefault将按您的意愿工作,返回值或0(数值类型的默认值):

如果NumCoefficientFix是可为空的类型,则使用??运算符将空值转换为0:

ViewData["Fix"] = db.PreStatus
  .Select (c => c.NumCoefficientFix)
  .FirstOrDefault (c => c.LkpNameFox == "1") ?? 0;

对于LINQ to数据库查询,首先选择NumCoefficientFix也(稍微)更有效,因为生成的SQL将只选择该列。

在调用
FirstOrDefault
之前,只需选择
NumCoefficientFix
属性即可:

ViewData["Fix"] = db.PreStatusViws
                    .Where(c => c.LkpNameFix == "1")
                    .Select(c => c.NumCoefficientFix)
                    .FirstOrDefault();`
或使用LINQ表示法:

ViewData["Fix"] = (from c in db.PreStatusViws
                   where c.LkpNameFix == "1"
                   select c.NumCoefficientFix
                  ).FirstOrDefault();

谢谢你,所以我必须一直使用if-else控件?无法为这种情况设置默认值?
ViewData[“Fix”]=p.numcoeficientfix??0
ViewData["Fix"] = (from c in db.PreStatusViws
                   where c.LkpNameFix == "1"
                   select c.NumCoefficientFix
                  ).FirstOrDefault();