GroupBy с идентификатором возможного нулевого объекта

У меня есть List<Item>

Каждый элемент имеет программу с идентификатором.

Если элемент еще не связан с программой, программа будет равна null.

Я хотел бы сгруппировать все элементы с помощью этого идентификатора программы

То, что я пробовал:

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

Это работает, если все элементы имеют программу. Но если программа имеет значение null, она выдает исключение System.NullReferenceException:

Сообщение = "Ссылка на объект не установлена экземпляр объекта.

Я считаю, что это связано с тем, что, поскольку программа имеет значение null, я не могу получить к ней идентификатор.

Мне нужны все элементы, даже если их программа равна null (и я бы хотел, чтобы они были сгруппированы по нулевой программе), поэтому исключение их не является вариантом.

Я подумал о двух возможных решениях, но я не уверен, как сделать их:

Будет что-то вроде GroupBy(x => x.Programa == null || x.Programa.Id) (который не работает)

Другой будет добавлять пустой программный объект, где программа имеет значение null, но я не знаю, как это сделать

Конечно, я также открыт для других решений

Заранее спасибо

Ответы

Ответ 1

Предполагая, что вы можете группировать все null Программы вместе, а Id будет неотрицательным, как насчет чего-то вроде этого:

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

Ответ 2

С новым С# 6.0 вы также можете использовать:

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

где ?. - оператор с нулевым условием. Эта возможность недоступна, когда был задан вопрос.