2011-04-25 6 views
15

나는 List<Item>GroupBy가 가능한 null 개체 인 ID가

각 항목에는 ID가있는 프로그램이 있습니다.

항목이 아직 프로그램에 연결되어 있지 않으면 프로그램이 null이됩니다.

나는 그것으로 그룹의 모든 항목을하고 싶습니다 내가 무엇을 시도했다입니다 그 프로그램의 ID

의 모든 항목은 프로그램이있는 경우

var listaAgrupada = client.ListarItens(null, null, null).GroupBy(x => x.Programa.Id).ToList(); 

이 작동합니다. 프로그램이 null의 경우에, 그것은 System.NullReferenceException 던졌습니다 ". 개체 참조 가 개체의 인스턴스로 설정되지 않았습니다"=이

메시지

저는 이것이 프로그램이 null이기 때문에이 ID에 액세스 할 수 없다고 생각합니다.

프로그램이 null 인 경우에도 모든 항목이 필요합니다 (null 프로그램으로 그룹화하고 싶습니다). 따라서 제외 할 수는 없습니다.

나는 두 가지 솔루션을 생각했지만, 나는 그들 중 하나를 수행하는 방법을 잘 모르겠어요 :

하나는

다른 (작동하지 않는)이 GroupBy(x => x.Programa == null || x.Programa.Id) 같은 것

미리 감사드립니다

될 프로그램이 null 인 빈 프로그램 객체를 추가 할 수 있지만이 과정의

, 나는 다른 솔루션에 열려있어하는 방법을 모른다

+0

당신이 목록 항목을 만들 때 문자열에 EMPTY 나 int에 대해 -99999와 같이 결코 사용하지 않는 'null'값을 할당하십시오. –

답변

27

그룹과 함께 당신에게 모든 null 프로그램을 할 수 있습니다 가정 및 Id 이런 것에 대해 어떻게 음이 아닌 것 : 새로운 C# 6.0

GroupBy(x => x.Programa == null ? -1 : x.Programa.Id) 
10

당신은 또한 사용할 수 있습니다

.GroupBy(x => x.Programa?.Id) 

?.은 널 조건부 연산자입니다. 이 질문은 질문이 제기되었을 때 가능하지 않았습니다.

+0

나는 GroupBy (x => x? .Programa 이 경우, Programma 속성이 null이 아니라는 사실 때문에) : – Martijn

+0

@Martijn 그 정정에 감사드립니다. 내 대답을 바로 잡았어. 나는'x' ('Item' 자체)가 null 인 (여전히 파열 될 것입니다),'Programa'가 null 인 경우에만 처리하지 않기로 결정했습니다. 이것이 내가 질문을 해석하는 방법이며, dcp의 답변 정신과 유사합니다. –

+0

지난 주이 문제를 해결하기 위해 노력했습니다. 나는 왼쪽 조인에 문제가 있었고, 문제는'select new '에 가능한 null 값을 설정하려고 할 때라고 생각했습니다. 그리고 그 문제가 전체적으로'groupby'였습니다. 감사! – Pablo

관련 문제