에 널 (null)에 속성을 호출 할 수 있습니다엔티티 프레임 워크는이 같은 데이터베이스의 일부 개체를 선택하는 코드를 표현
db.ObjectTypes.GroupJoin(db.Terms, t => t.Id, term => term.ObjectTypeId, (t, terms) => new Term()
{
Type = t.Type,
ObjectTypeId = t.Id,
Deadline = ((int?)terms.FirstOrDefault().Deadline ?? 0),
});
문제는 측면에서 어떤 물체가 존재하지 않게되었을 때에,이 라인은 작동이 오는가 어떻게 , null
((int?)terms.FirstOrDefault().Deadline ?? 0)
나를 위해이 코드가 실제로있는 동안이 충돌 할 수처럼 보이는 FirstOrDefault()
반환 save.So 나는이 경우 null 참조 예외를 얻을 것으로 기대 그래서. 줄을 변경하려고 시도했습니다.
(terms.FirstOrDefault()?.Deadline ?? 0)
그런 식으로 null이 될 수 있지만 표현식에서는 유효하지 않습니다.
코드가 실제로 실행되지 않지만 sql로 변환 되었기 때문에 예외가 발생하지 않는다는 것을 알고 있습니다.하지만 왜 이런 식으로 처리했는지, 다른 방법으로 처리 할 수없는 이유를 설명하고 있습니다.
힌트는 코드가 실행되지 않는다는 것입니다. 값이 'null'이면 속성이 호출되지 않는 방식으로 SQL로 변환됩니다. – Enigmativity
@Enigmativity 변환 된 것으로 알고 있지만 유효하지 않은 코드처럼 보이지만 유효한 것으로 보이는 코드는 허용되지 않습니다. – ColmanJ
"다른 방향"을 지원하지 않으면 EF 오류가 아닙니다. 첫째, '?'연산자는 EF가 개발되었을 때 존재하지 않았습니다. 둘째로, 가장 중요한 점은, 연산자 '?'는 C# 표현식 트리에서 지원되지 않는다는 것입니다 (MS 개발자는 명확한 아이디어가 없으므로 어떤 유형의 (새로운) 표현식이 표현되어야하는지 결정하지 않았기 때문에) EF와 다른 표현 번역자는 아무 것도 할 수 없습니다. –