即使声明,FirstOrDefault linq扩展默认项也为null

时间:2011-12-05 19:41:12

标签: c# asp.net-mvc linq

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表达式的结果为空,则值为“false”,我得到的结果是testSetting是空。

我已经检查了类似情况的S / O,我还检查了msdn文档,我觉得我正在实现,但显然我不是。

1 个答案:

答案 0 :(得分:6)

您正在使用带有谓词的FirstOrDefault - 因此,如果您的obj.ObjectSettings 为空,但没有匹配的值为ObjectTypeSetting.Name { {1}},你最终仍然没有结果。

如果你想在这种情况下获得默认设置,你应该使用:

"PropName"