我该如何使用FirstOrDefault()?

时间:2010-12-21 06:49:35

标签: asp.net-mvc linq

我有这段代码,当表达式没有返回数据时,我想设置一个值给Viewdate:

ViewData["Fix"] = db.PreStatusViws.Where(c => c.LkpNameFix == "1").FirstOrDefault().NumCoefficientFix;

可以为此设置零或“文本”吗?我不,我该怎么办?! 注意:FirstOrDefault(null)会导致错误。

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

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

如果NumCoefficientFix是可以为空的类型,那么使用??运算符将null转换为0:

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

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

答案 3 :(得分:1)

您只需在致电NumCoefficientFix之前选择FirstOrDefault媒体资源:

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