我有这样的代码,我想设置一个值Viewdate当表达式返回任何数据:如何使用FirstOrDefault()?
ViewData["Fix"] = db.PreStatusViws.Where(c => c.LkpNameFix == "1").FirstOrDefault().NumCoefficientFix;
可我设置为零或“文本”是什么?我不,我能做什么?! 注意:FirstOrDefault(null)会导致错误。
我有这样的代码,我想设置一个值Viewdate当表达式返回任何数据:如何使用FirstOrDefault()?
ViewData["Fix"] = db.PreStatusViws.Where(c => c.LkpNameFix == "1").FirstOrDefault().NumCoefficientFix;
可我设置为零或“文本”是什么?我不,我能做什么?! 注意:FirstOrDefault(null)会导致错误。
默认将返回数据类型的默认值。如果那个地方的数据类型是引用类型(例如字符串),默认值将始终为空,因此以下.NumsCoefficientFix成员将引发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(默认工作对于数值类型):
ViewData["Fix"] = db.PreStatus
.Select (c => c.NumCoefficientFix)
.FirstOrDefault (c => c.LkpNameFox == "1");
如果NumCoefficientFix是可空类型,然后使用??运营商向空转换成0:
ViewData["Fix"] = db.PreStatus
.Select (c => c.NumCoefficientFix)
.FirstOrDefault (c => c.LkpNameFox == "1") ?? 0;
第一选择NumCoefficientFix也(略)的LINQ到数据库查询效率更高,在产生将仅选择该列的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控制?没有办法为这种情况设置默认值? – Negar 2010-12-21 07:06:41
'ViewData [“Fix”] = p.NumCoefficientFix ?? 0' – Ahmad 2010-12-21 10:10:27