Могу ли я использовать IComparer в .OrderBy () в Linq-to-SQL? - PullRequest
2 голосов
/ 15 сентября 2010

Этот вопрос ( LINQ и порядок естественной сортировки ... ) говорит о том, как реализовать естественную сортировку в Linq с использованием IComparer. В прошлом я успешно использовал это с IEnumerables, но не могу заставить его работать в выражениях Linq-to-SQL. Это потому, что специфическая перегрузка .OrderBy (), которая принимает IComparer, не поддерживается Linq-to-SQL?

Если это действительно так, есть ли практические обходные пути?

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Дело не в том, что IComparer не поддерживается, а в том, что в Linq-to-Sql OrderBy () должен быть преобразован в операцию T-Sql.Если он позволяет вам указать критерии для сравнения, то для его использования SQL-сервер должен выполнить код C #.

Если вам нужно сделать что-то в Linq-To-Sql, которое не поддерживается, ночто может быть сделано в T-SQL, вы всегда можете обойти его, используя хранимую процедуру, которая прекрасно работает с Linq-to-Sql.Если это неудобно, вы можете вызвать метод ToList (), чтобы вызвать выполнение, а затем отсортировать его в памяти.Практичность этого зависит от размера данных и того, сколько из них вы хотите получить (например, при внедрении нумерации страниц).

1 голос
/ 15 сентября 2010

Да.Linq-to-SQL переводит ваши лямбда-выражения прямо в sql, поэтому он, очевидно, не может обрабатывать произвольный код.Вы можете использовать ToList() для принудительного выполнения запроса, а затем выполнить OrderBy в этом списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...