我有一个 List<Item>
每个项目都有一个程序,它有一个Id.
如果项目尚未链接到某个程序,则该程序将为null.
我想按照程序的ID对所有项目进行分组
这就是我尝试过的:
var listaAgrupada = client.ListarItens(null, null, null).GroupBy(x => x.Programa.Id).ToList();
Run Code Online (Sandbox Code Playgroud)
如果所有项目都有程序,则此方法有效.但是如果程序为null,则抛出System.NullReferenceException:
Message ="对象引用未设置为对象的实例."
我相信这是因为,由于程序为空,我无法访问它的Id.
我需要所有的项目,即使他们的程序为空(我也希望它们按空程序分组),所以排除它们不是一个选项.
我想过两个可能的解决方案,但我不确定如何做任何一个:
一个会是这样的GroupBy(x => x.Programa == null || x.Programa.Id)(这是行不通的)
另一个是添加一个程序为空的空程序对象,但我不知道如何做到这一点
当然,我也对其他解决方案持开放态度
提前致谢
dcp*_*dcp 33
假设您可以将所有null程序组合在一起并且Id是非负面的,那么如下所示:
GroupBy(x => x.Programa == null ? -1 : x.Programa.Id)
Run Code Online (Sandbox Code Playgroud)
Jep*_*sen 16
使用新的C#6.0,您还可以使用:
.GroupBy(x => x.Programa?.Id)
Run Code Online (Sandbox Code Playgroud)
其中?.是空条件运算符.当问到这个问题时,这种可能性是不可行的.
小智 7
混合两个答案,这也可以使用:
.GroupBy(x => x?.Programa?.Id ?? -1)
Run Code Online (Sandbox Code Playgroud)
使用 ”??” 在“x”或“x.Program”为空的情况下定义默认值。