我有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)
(不起作用)
另一个是添加一个程序为空的空程序对象,但我不知道怎么做
当然,我也对其他解决方案持开放态度
提前致谢
答案 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”为空,则定义默认值。