Как использовать orderby с двумя полями в linq?

Скажем, что у меня есть эти значения в таблице базы данных

id = 1
StartDate = 1/3/2010
EndDate =  1/3/2010

id = 2
StartDate = 1/3/2010
EndDate = 1/9/2010

Теперь у меня есть этот порядок для моего linq

var hold = MyList.OrderBy(x => x.StartDate).ToList();

Я хочу заказать его, но также используя дату окончания.

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

id 2
id 1

Итак, endDates, которые больше идут первым. Я не уверен, что мне нужно изменить это, чтобы использовать какую-либо функцию сравнения или что-то в этом роде.

Ответ 1

MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate);

Ответ 2

Используйте ThenByDescending:

var hold = MyList.OrderBy(x => x.StartDate)
                 .ThenByDescending(x => x.EndDate)
                 .ToList();

Вы также можете использовать синтаксис запроса и сказать:

var hold = (from x in MyList
           orderby x.StartDate, x.EndDate descending
           select x).ToList();

ThenByDescending - это метод расширения на IOrderedEnumerable, который является тем, что возвращается OrderBy. См. Также связанный метод ThenBy.

Ответ 3

VB.NET

 MyList.OrderBy(Function(f) f.StartDate).ThenByDescending(Function(f) f.EndDate)

ИЛИ

  From l In MyList Order By l.StartDate Ascending, l.EndDate Descending

Ответ 4

MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate);

Обратите внимание, что вы также можете использовать ключевое слово Descending в OrderBy (в случае необходимости). Итак, еще один возможный ответ:

MyList.OrderByDescending(x => x.StartDate).ThenByDescending(x => x.EndDate);

Ответ 5

Если у вас есть два или более полей для заказа, попробуйте это:

var soterdList = initialList.OrderBy(x => x.Priority).
                                    ThenBy(x => x.ArrivalDate).
                                    ThenBy(x => x.ShipDate);

Вы можете добавить другие поля с clasole "ThenBy"