Дополнительно
Множественный «заказ» в LINQ
У меня есть две таблицы, фильмы
и категории
, и я получаю упорядоченный список сначала categoryID , а затем Name .
Таблица фильмов имеет три столбца ID, имя и категория ID . Таблица категорий имеет два столбца ID и Имя .
Я попробовал что-то вроде следующего, но это не сработало.
var movies = _db.Movies.OrderBy( m => { m.CategoryID, m.Name })
1534
7
Это должно работать для вас:
Используя LINQ не-лямбда, запрос-синтаксис, вы можете сделать это:
[EDIT для адресации комментария] Чтобы контролировать порядок сортировки, используйте ключевые слова «по возрастанию» (что по умолчанию и, следовательно, не особенно полезно) или «по убыванию», например так:
Добавить "новый":
Это работает на моей коробке. Это возвращает что-то, что можно использовать для сортировки. Возвращает объект с двумя значениями.
Аналогично, но отличается от сортировки по комбинированному столбцу следующим образом.
используйте следующую строку в вашем DataContext, чтобы записать активность SQL в DataContext на консоль - тогда вы сможете точно увидеть, что запрашивают ваши операторы linq из базы данных:
Следующие операторы LINQ:
А также
создать следующий SQL:
Принимая во внимание, что повторение OrderBy в Linq, по-видимому, отменяет результирующий вывод SQL:
А также
создать следующий SQL (имя и категория Id переключаются):
Я создал несколько методов расширения (ниже), поэтому вам не нужно беспокоиться, заказан ли IQueryable или нет. Если вы хотите заказать по нескольким свойствам, просто сделайте это следующим образом:
Это особенно полезно, если вы создаете заказ динамически, т.е. из списка свойств для сортировки.
Есть еще как минимум один способ сделать это с помощью LINQ, хотя и не самый простой. Вы можете сделать это, используя метод
OrberBy ()
, который используетIComparer
. Сначала нужно реализоватьIComparer
для классаMovie
, как это:Затем вы можете заказать фильмы со следующим синтаксисом:
Если вам нужно переключить порядок на нисходящий для одного из элементов, просто переключите x и y внутри
Compare ()
методMovieComparer
соответственно.Если использовать общий репозиторий
еще