我有这段代码,当表达式没有返回数据时,我想设置一个值给Viewdate:
ViewData["Fix"] = db.PreStatusViws.Where(c => c.LkpNameFix == "1").FirstOrDefault().NumCoefficientFix;
可以为此设置零或“文本”吗?我不,我该怎么办?! 注意:FirstOrDefault(null)会导致错误。
答案 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();