Как я могу сделать заказ, используя указанный выше синтаксис без использования синтаксиса расширения.
Используйте запятую между полями:
orderby a, b
А что делает заказ, делает заказ?
Когда вы используете orderby
дважды подряд, элементы концептуально сначала будут отсортированы с использованием первого orderby
, а затем снова отсортированы с использованием второго orderby
. Поскольку сортировка определяется как стабильная сортировка (объекты, связанные со вторым orderby
, останутся в том же порядке, что и после сортировки с первым orderby
, это фактически означает, что это:
var query = from x in l
orderby x.A
orderby x.B
select x;
эквивалентно:
var query = from x in l
orderby x.B, x.A
select x;
В результате, orderby
термины поменялись местами с того, что вы, вероятно, намеревались.
Тестирование с помощью LINQ to SQL
Это можно проверить, попробовав его в LINQ to SQL. Я создал следующий запрос:
var query = from a in dc.Orders
orderby a.Date
orderby a.CustomerID
select a;
и это был сгенерированный SQL:
SELECT [t0].[ID], [t0].[CustomerID], [t0].[Date], [t0].[Description]
FROM [dbo].[Order] AS [t0]
ORDER BY [t0].[CustomerID], [t0].[Date]
Обратите внимание, что orderby a.Date
не игнорируется. Оба условия включены в предложение ORDER BY, но в противоположном порядке, чем вы могли бы.