我有一个List<Item>
每个Item有一个Program, Program有一个Id。
如果一个Item还没有链接到一个程序,它的程序将为空。
我想按程序Id对所有项目进行分组
我已经试过了:
var listaAgrupada = client.ListarItens(null, null, null).GroupBy(x => x.Programa.Id).ToList();
如果所有项目都有程序,则此操作有效。但是如果一个程序是空的,它会抛出一个System。得到NullReferenceException:
消息= "对象引用未设置为对象的实例。"
我相信这是由于这样一个事实,即程序是空的,我不能访问它的Id。
我需要所有的项目,即使它们的程序是空的(我也希望它们按空程序分组),所以排除它们不是一个选项。
我想到了两种可能的解决方案,但我不确定如何做:
一个是这样的GroupBy(x => x.Programa == null || x.Programa.Id)
(这不起作用)
另一个是添加一个空的program对象,其中program为null,但是我不知道怎么做
当然,我也愿意接受其他的解决方案
Thanks in advance
假设您可以将所有null
程序组合在一起并且Id
将是非负的,那么像这样如何:
GroupBy(x => x.Programa == null ? -1 : x.Programa.Id)
在新的c# 6.0中,您还可以使用:
.GroupBy(x => x.Programa?.Id)
,其中?.
为空条件操作符。
混合两个答案,这也可以使用:
.GroupBy(x => x?.Programa?.Id ?? -1)
使用"??"定义了在"x"或"x. program "为空的情况下的默认值。