2015-03-30 2 views
-1

У меня есть список, как следующий:Заказ списка по наибольшему значению из двух свойств

|Name|Val. Date 1| Val. Date 2| 
|PA |  200|   200| 
|PB |   0|   300| 
|PC |  200|   0| 
|PD |  150|   150| 

Заказ списка по Валу. Date1 даст мне что-то вроде: PA, PC, PD и PB. и что-то подобное, если я сделаю это для Вала. Дата 2.

Но что мне действительно нужно сделать, это заказать его по наивысшему значению, записанному в дате 1 или дате 2, что приводит к чему-то вроде этого: PB, PA, PC и PD.

Как я могу решить этот вопрос?

+0

Какова структура 'Список ' –

+0

Почему бы не создать новую propety с max (Val1, Val2) и порядок по этому значению? – Alex

+0

Что вы пробовали до сих пор? Где вы застряли? Улучшите свой вопрос, разместив свой код. –

ответ

3

использование Math.Max(), чтобы получить максимальное значение, а затем упорядочить по ней:

list.OrderByDescending(x => Math.Max(x.Date1, x.Date2)); 
+0

, если вы добавите 'ThenByDescending' с суммой обоих значений, он должен работать в пограничных случаях; 9 – Carsten

+1

@ CarstenKönig: Невозможно вывести из вопроса, что это желаемое поведение. OP запрашивает упорядочение по наивысшему значению двух свойств, и это решение обеспечивает это. –

+2

OP хочет, чтобы списки выполнялись с использованием наивысшего из двух номеров одного и того же номера индекса, поэтому он использует '300', а не' 0' на 'PC'. Он должен сравнить 2 числа с одним и тем же номером индекса и посмотреть, какой из них самый высокий, а затем заказать списки с использованием только самых высоких чисел. – maam27

2

Поскольку вы используете список, вы можете сделать инлайн вид списка с помощью List.Sort(Comparison<T>):

list.Sort((lhs, rhs) => 
(
    Math.Max(lhs.Val.Date1, lhs.Val.Date2) - 
    Math.Max(rhs.Val.Date1, rhs.Val.Date2) 
)); 

Если вы назначаете результаты решения Linq обратно в список, используя .ToList(), то вместо этого создание места на месте будет намного более эффективным с одним важным предостережением:

List.Sort() НЕ является устойчивым типом, так что он не сохраняет порядок равных значений. Однако Linq OrderBy является стабильным.

Смежные вопросы