2010-12-21 139 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(); 
相關問題