2011-12-05 13 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"); 

を宣言する私の最終的な実装は若干異なりますが、私の問題は、LINQの結果ならばtestSettingは「偽」の値を持つ型ObjectSettingの移入されたオブジェクトであるべきことであってもnullです式が空の場合、結果はtestSettingがnullです。FirstOrDefaultのLINQ拡張デフォルトのアイテムは

同様のケースでS/Oをチェックしましたが、msdnのドキュメントもチェックしましたが、私は正しく実装しているように感じましたが、明らかに私はそうではありません。

+1

、それは本当にあなたが短いが、完全な実装を提供することができれば役立つだろう - と自分の中で短い名前を使用してサンプルコードは、スタックオーバーフローで利用できる比較的狭いスペースでの読み易さに役立ちます。 –

答えて

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 ")を実行できますか?デフォルト設定。 – Ryan

+0

@ライアン:うん、これもオプションだよ。 –

関連する問題