Как сгруппировать по дочернему свойству дочернее свойство, которое может быть нулевым? - PullRequest
0 голосов
/ 16 ноября 2010

Как можно сгруппировать следующее?

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

без ошибок для людей, у которых нет адреса?

  • это можно сделать одним утверждением?
  • если нет, то должен ли я сначала получить список Distinct () для всех различных адресов участников? Как? (на самом деле - даже если это возможно - было бы замечательно также научиться делать b :-))
  • Я не видел этого, но есть ли что-то эквивалентное GetFirstOrNew (), которое можно использовать для создания экземпляра и возврата ненулевого значения?

Большое спасибо!

1 Ответ

3 голосов
/ 16 ноября 2010

Это можно сделать одним утверждением, да:

// 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()));
...