Если вы хотите, чтобы люди, не имеющие домашних животных, чтобы быть отсортирован выше тех, с домашними животными, вы можете использовать это:
return this.People
.OrderBy(x => x.Car.Name)
.ThenBy(x => x.Pet == null ? string.Empty : x.Pet.Name);
Если вы собираетесь делать много операций сортировки с участием домашних животных, вы можете сделать свой собственный PetComparer
класс, который наследует от Comparer<Pet>
, как это:
public class Pet
{
public string Name { get; set; }
// other properties
}
public class PetComparer : Comparer<Pet> //
{
public override int Compare(Pet x, Pet y)
{
if (x == null) return -1; // y is considered greater than x
if (y == null) return 1; // x is considered greater than y
return x.Name.CompareTo(y.Name);
}
}
Теперь, ваш запрос будет выглядеть следующим образом:
return this.People
.OrderBy(x => x.Car.Name)
.ThenBy(x => x.Pet, new PetComparer());
Примечание: это будет делать обратное запросу в верхней части этого ответа - он будет сортировать людей без домашних животных на дно (в пределах названия автомобиля).
Как заказать нуль-животных, первый или последний? –