Если цель состоит в том, чтобы иметь B с Нечто в ListA, затем B с пустой коллекцией, затем B с нулевой ссылкой.
С помощью ListA, который также упорядочен, вы можете проверить наличие нулевого и пустого списка, а затем упорядочитьисходя из этого.
var Bs = new[] {
new B{ListA = new []{ new A { Id = 3 },new A { Id = 1 },new A { Id = 2 }} }
,new B{ListA = new List<A>{} }
,new B{ListA = null }
};
var result = Bs.Select(b =>
{
int i = 0;
if (b.ListA == null)
{
i = 2;
}
else if (!b.ListA.Any())
{
i = 1;
}
else {
b.ListA = b.ListA.OrderBy(a => a.Id).ToList();
}
return new { oIndex = i, value = b };
})
.OrderByDescending(x => x.oIndex)
.Select(g => g.value);
Вы указали: "когда ListA не пустой, все работает нормально" ;Я не уверен, чтобы понять, как.Поскольку следующий код будет выдан без какой-либо нулевой или пустой коллекции.
var Bis = new[] {
new B{ListA = new []{ new A { Id = 3 },new A { Id = 1 },new A { Id = 2 }} }
,new B{ListA = new []{ new A { Id = 3 },new A { Id = 1 }} }
,new B{ListA = new []{ new A { Id = 999 }} }
,new B{ListA = new []{ new A { Id = 3 },new A { Id = 1 },new A { Id = 2 },new A { Id = 4 }} }
};
var result = Bis.OrderByDescending(ev => ev.ListA.OrderBy(a => a.Id)).ToList();
Если вы сравниваете список, вам нужно сравнить его с чем-то.{1, 2, 3} больше, чем {1,1,1,1}?Как {1,2,3} сравнить с {999, 999}?{2} и {1,1}?Потому что в нем больше элементов?Большее значение?Что если один имеет большую ценность, а другая сумма в два раза больше?Для 2 списка 0s .. вы основываете свое сравнение на сумму и значение?