GroupBy,Id为可能的null对象

时间:2011-04-25 20:31:31

标签: c# linq

我有List<Item>

每个项目都有一个程序,它有一个Id。

如果某个项目尚未与某个程序相关联,则该程序将为空。

我想根据它的程序ID

对所有项目进行分组

这就是我尝试过的:

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

如果所有项目都有程序,则此方法有效。但是如果程序为null,则抛出System.NullReferenceException:

  

Message =“对象引用未设置为   一个对象的实例。“

我认为这是因为,由于程序为空,我无法访问它的Id。

我需要所有项目,即使他们的程序为空(我也希望它们按空程序分组),因此排除它们不是一种选择。

我想过两种可能的解决方案,但我不确定如何做任何一种解决方案:

就像这样GroupBy(x => x.Programa == null || x.Programa.Id)(不起作用)

另一个是添加一个程序为空的空程序对象,但我不知道怎么做

当然,我也对其他解决方案持开放态度

提前致谢

3 个答案:

答案 0 :(得分:30)

假设您可以将所有null个程序组合在一起,而Id将是非负面的,那么这样的事情如何:

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

答案 1 :(得分:15)

使用新的C#6.0,您还可以使用:

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

其中?.是空条件运算符。当提出问题时,这种可能性无法实现。

答案 2 :(得分:3)

混合两个答案,这也可以使用:

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

使用“??”如果“x”或“x.Program”为空,则定义默认值。