2011-12-05 18 views
2
ObjectSetting defaultSetting = new ObjectSetting(); 
defaultSetting.Value = "false"; 
defaultSetting.ObjectTypeSetting = db.ObjectSettings.First(ots => ots.Name == "PropName"); 

ObjectSetting testSetting = obj.ObjectSettings.DefaultIfEmpty(defaultSetting) 
    .FirstOrDefault(os => os.ObjectTypeSetting.Name == "PropName"); 

我的最終實施將略有不同,但我的問題是,testSetting應該是類型ObjectSetting的填充物以「假」值,如果LINQ的結果表達式是空的,我得到的結果是testSetting爲null。FirstOrDefault LINQ擴展默認項爲空,即使宣佈

我已經檢查過類似情況下的S/O,我也檢查了msdn文檔,我覺得我正在實施正確,但顯然我不是。

+1

對於未來的問題,這將真正幫助,如果你可以提供一個簡短但完整的實現 - 在使用較短的名稱您示例代碼將有助於提高Stack Overflow上可用的相對較小的空間的可讀性。 –

回答

6

您使用FirstOrDefault與謂詞 - 所以,如果你是obj.ObjectSettings,但沒有匹配的值有"PropName"ObjectTypeSetting.Name,你還是會最終沒有結果。

如果你想在這種情況下,你的默認設置,你應該使用:

var testSetting = obj.ObjectSettings 
        .Where(os => os.ObjectTypeSetting.Name == "PropName") 
        .DefaultIfEmpty(defaultSetting) 
        .First(); 
+1

或者你可以做'.FirstOrDefault(os => os.ObjectTypeSetting.Name ==「PropName」)?? defaultSetting'。 – Ryan

+0

@Ryan:是的,這也是一個選擇。 –