Как я могу сделать заказ, используя указанный выше синтаксис без использования синтаксиса расширения.
Используйте запятую между полями:
orderby a, b
А что делает orderby, orderby?
Когда вы используете 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, но в обратном порядке, чем вы могли предполагать.
person
Mark Byers
schedule
25.05.2010