¿Cómo puedo hacer un pedido al mismo tiempo utilizando la sintaxis anterior sin usar la sintaxis de extensión.
utilizar una coma entre los campos:
orderby a, b
Y lo que hace el orderby, orderBy hacer?
Cuando se utiliza orderby
dos veces seguidas los elementos conceptualmente primero se ordenarán utilizando la primera orderby
, y luego ordenados de nuevo utilizando la segunda orderby
. Debido a que la clasificación se define como un stable sort (objetos que están vinculados con el segundo orderby
permanecerá en el mismo orden que después de la clasificación con la primera orderby
de manera efectiva significa que este:
var query = from x in l
orderby x.A
orderby x.B
select x;
es equivalente a:
var query = from x in l
orderby x.B, x.A
select x;
El resultado es que los términos se intercambian orderby
de lo que es probable que pretendía.
Prueba con LINQ a SQL
Esto se puede verificar intentándolo en LINQ to SQL. He creado la siguiente consulta:
var query = from a in dc.Orders
orderby a.Date
orderby a.CustomerID
select a;
y este era el SQL generado:
SELECT [t0].[ID], [t0].[CustomerID], [t0].[Date], [t0].[Description]
FROM [dbo].[Order] AS [t0]
ORDER BY [t0].[CustomerID], [t0].[Date]
Tenga en cuenta que la orderby a.Date
no se ignora. Ambos términos están incluidos en la cláusula ORDER BY, pero en el orden opuesto al que podría haber pensado.
Según la especificación, OrderBy siempre es una clasificación estable (independientemente del proveedor de LINQ). Lo que eso significa es "si las claves de dos elementos son iguales, se conserva el orden de los elementos". Si OrderBy's encadenado conservará o no el orden depende de las claves que se usen, no del proveedor LINQ (aunque eso obviamente afectará los valores clave). – hemp
@hemp: después de volver a buscar más, creo que tienes razón. Extrañamente, su propia respuesta en la que cita de MSDN ('Hacer esto introduce un nuevo orden primario que ignora el orden previamente establecido') contradice lo que acaba de decir en este comentario. Pero creo que es MSDN que está mal. –
No se contradice directamente, es simplemente confuso. Lo que está diciendo es que el nuevo orden primario no tendrá en cuenta el orden existente. ** Sin embargo **, una vez que aplica el orden inicial, si el nuevo pedido encuentra que los valores clave son iguales, no volverá a ordenar esos elementos. Entonces, de hecho, ambas declaraciones son verdaderas, pero no muy claras. – hemp