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

내 최종 구현을 선언하는 것은 약간 다를지라도 널 (null)이지만, 내 문제는 경우 testSetting이 값을 "false"형 ObjectSetting의 인구 객체를해야한다는 것이다 LINQ의 결과 표현식이 비어 있습니다. 결과는 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") 할 수 있습니다. ?? defaultSetting'입니다. – Ryan

+0

@ 라이언 : 그래, 그게 선택이야. –

관련 문제