如何通过子属性的子属性对null进行分组?

时间:2010-11-16 08:22:51

标签: linq linq-to-objects

我怎样才能对以下内容进行分组?

people.GroupBy(p=>p.Addresses.GetFirstOrDefault().State);

没有失败的人没有地址?

  • 可以在一个声明中完成吗?
  • 如果没有,我是否必须首先获得所有各种地址成员的Distinct()列表?怎么样? (实际上 - 即使有可能 - 也很好学习如何做b :-))
  • 我没有看到它,但有没有相当于GetFirstOrNew()的东西可用于实例化并返回非null?

非常感谢!

1 个答案:

答案 0 :(得分:3)

可以在一个声明中完成,是的:

// Set up whatever you need
Address dummyAddress = new Address { State = "" };

people.GroupBy(p => (p.Addresses.GetFirstOrDefault() ?? dummyAddress).State);

或者,您可能想要编写辅助方法:

public string GetState(Address address)
{
    return address == null ? null : address.State;
}

然后你可以使用:

people.GroupBy(p => GetState(p.Addresses.GetFirstOrDefault()));