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


этот вопрос уже есть ответ здесь:

  • Несколько "order by" в LINQ 7 ответов

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

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

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

теперь у меня есть до сих пор этот orderby для моего linq

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

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

вроде Так порядок я бы хочу это в качестве

id 2
id 1

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

5 99

5 ответов:

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

использовать 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.

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

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

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

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

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

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

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