GroupBy的Id可能为空对象

  • 本文关键字:对象 Id GroupBy c# linq
  • 更新时间 :
  • 英文 :


我有一个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 "为空的情况下的默认值。

相关内容

  • 没有找到相关文章

最新更新