2010-12-21 141 views
1

我有这样的代码,我想设置一个值Viewdate当表达式返回任何数据:如何使用FirstOrDefault()?

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

可我设置为零或“文本”是什么?我不,我能做什么?! 注意:FirstOrDefault(null)会导致错误。

回答

1

默认将返回数据类型的默认值。如果那个地方的数据类型是引用类型(例如字符串),默认值将始终为空,因此以下.NumsCoefficientFix成员将引发NullReferenceException。

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

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

6

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

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

谢谢你,所以我不得不一直使用的if-else控制?没有办法为这种情况设置默认值? – Negar 2010-12-21 07:06:41

+2

'ViewData [“Fix”] = p.NumCoefficientFix ?? 0' – Ahmad 2010-12-21 10:10:27

1

如果您先选择数字列,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。

1

你只需要调用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(); 
相关问题