Комментарии 12
Еще ругают С++ за его адовые конструкции и 100500 способов сделать один и тот же результат.
Можно даже в один OrderBy)
var items = arr.OrderBy(p => (p.Primary, p.Secondary));
... получить правильный результат можно и через последовательность вызовов OrderBy().OrderBy(), нужно только поменять вызовы местами.
Чтобы это работало, в реализациии OrderBy
должна использоваться устойчивая сортировка. В то же время, SQL-оператор ORDER BY
не гарантирует устойчивость. Поэтому я бы не поручился за то, что все провайдеры LINQ-to-SQL правильно обработают это ваше .OrderBy().OrderBy()
.
Неужели вообще кто-то так делает? Откуда возникла идея написать статью на тему «сравним в подробностях два способа сделать сортировку: очевидно правильный, быстрый и предсказуемый и очевидно неправильный, медленный и с граблями»?
Неужели вообще кто-то так делает? Откуда возникла идея написать статью на тему «сравним в подробностях два способа сделать сортировку: очевидно правильный, быстрый и предсказуемый и очевидно неправильный, медленный и с граблями»?
В статье я отвечаю на этот вопрос в разделе "Предыстория". Можно почитать комменты на Хабре: тык.
Некоторые из описанных в той статье вызовов OrderBy().OrderBy()
разработчики править не стали (Unity, например).
Поэтому я бы не поручился за то, что все провайдеры LINQ-to-SQL правильно обработают это ваше .OrderBy().OrderBy()
В LINQ to Objects, когда на вход поступает нечто, реализующеее IEnumerable но не IQueryable, провадеры не используются, и OrderBy реализуется методом Enumerable.OrderBy. А для него документация явно сообщает, что сортировка является устойчивой.
Да, это потребует пяток лишних строк кода, но, может, если уж речь зашла о производительности, оно того стоит?
С тем же успехом можно написать статью о том, что лучше - надевать штаны через голову или обычным способом. И в конце вывод, что обычным все-таки быстрее, расходуется меньше энергии и т.п.
Сортировки в C#: OrderBy.OrderBy или OrderBy.ThenBy? Разбираемся, что эффективнее и почему