| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > LINQ (Language-Integrated Query) > Queryable.OrderBy() по нескольким полям |
| Автор: Лен 17.7.2009, 16:07 | ||||
Пусть есть некий класс MwfDocument с кучей полей. Пусть есть некий IQueryable<MwfDocument>. Нужно отсортировать его по нескольким полям. В результате некоторых умственных измышлений пришёл к такому варианту:
В итоге получился запрос, который я не могу привести по техническим причинам, но его Expression.ToString() выглядит так: value(System.Data.Objects.ObjectQuery`1[BlankPublish.Entity.WorkflowDocument]).Where(doc => (Convert(doc.RawStatus) = 10)).Where(doc => ((Convert(doc.SubjectOwner.SubjectID) = null) || (doc.SubjectOwner.SubjectID = value(BlankPublish.Entity.Filters.SearchFilterDocuments).SubjectOwnerID))).OrderBy(x => x.DocumentDate).OrderBy(x => x.DocumentNumber) SQL Profiler показывает, что EntityFramework, через который идёт работа, отправляет на сервер такой запрос:
ORDER BY [Project1].[DocumentNumber] - почему сортировка идёт только по одному полю? (аналогичная ситуация у меня была и при сортировке по трём полям) Что и как сделать, чтобы правильно отсортировать по нескольким полям? |
| Автор: WarHog 17.7.2009, 17:42 | ||
Привет, в случае нескольких ключей, по которым должна идти сортировка, нужно воспользоваться сначала OrderBy, а затем ThenBy, примерно так:
|
| Автор: Лен 20.7.2009, 12:12 |
| Спасибо, очень помогло. Только один нюанс: при вызове ThenBy() queryable (типа IQueryable<T>) надо приводить к IOrderedQueryable<T>. |