Как я могу управлять несколькими критериями OrderByDescending?

Я хочу получить список, который упорядочивает по трем свойствам, которые по приоритету

  • ToDate
  • Номер
  • RunDate

Мой код здесь

MyList
    .OrderByDescending(p => p.ToDate)
    .OrderByDescending(p => p.Number)
    .OrderByDescending(p => p.RunDate)
    .FirstOrDefault();

Но результат неверен.

Например, если MyList содержит два элемента: e1, e2 и e1.ToDate > e2.ToDate, результат: e2.

Какое свойство должно быть первым? Свойство с наивысшим приоритетом (ToDate) или самым низким (RunDate)?

Ответ 1

Я подозреваю, что вы действительно хотите:

MyList
.OrderByDescending(p => p.ToDate)
.ThenByDescending(p => p.Number)
.ThenByDescending(p => p.RunDate)
.FirstOrDefault();

ThenBy и ThenByDescending используются для указания вторичных порядков после того, как вы предоставили первичный код с помощью OrderBy или OrderByDescending.