c# - 具有可能的空对象的 Id 的 GroupBy

标签 c# linq

我有一个 List<Item>

每个 Item 都有一个 Program,它有一个 Id。

如果一个项目还没有链接到一个程序,它的程序将为空。

我想按它的程序 ID 对所有项目进行分组

这是我试过的:

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

如果所有项目都有一个程序,这就有效。但是如果程序为空,它会抛出 System.NullReferenceException:

Message = "Object reference not set to an instance of an object."

我认为这是因为 Program 为空,我无法访问它的 ID。

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

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

一个会是这样的GroupBy(x => x.Programa == null || x.Programa.Id) (这是行不通的)

另一种是在 program 为 null 的地方添加一个空的程序对象,但我不知道该怎么做

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

提前致谢

最佳答案

假设您可以将所有 null 程序组合在一起,并且 Id 将是非负的,这样的事情怎么样:

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

关于c# - 具有可能的空对象的 Id 的 GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5782915/

相关文章:

c# - LINQ 在 XML 文件中创建新记录

c# - 在 WPF 中选择静态 ComboBoxItems 的项目

linq - 执行 LambdaExpression 的问题

c# - 如何使用省略了 lambda 的非常短的 linq 将方法应用于所有列表成员?

c# - 通过 LINQ 插入数据时出现重复键错误但找不到具有相同值的条目

c# - 多个线程访问一个返回方法,带锁是线程安全的吗?

c# - c#属性的多态性

c# - LINQ:将多个属性的对象列表分组到列表列表中的更好方法?

c# - 使用 LINQ 将所有 Xml 元素值大写

c# - C# android 中的回调