Usted debe definitivamente utilizar ThenBy
en lugar de varias OrderBy
llamadas. (Supongo que uno de los fragmentos en su pregunta pretendía utilizar ThenBy
En el momento de escribir estas líneas, los dos fragmentos son idénticos..)
Yo sugeriría esto:
tmp = invoices.InvoiceCollection
.OrderBy(o => o.InvoiceOwner.LastName)
.ThenBy(o => o.InvoiceOwner.FirstName)
.ThenBy(o => o.InvoiceID);
Nota cómo se puede usa el mismo nombre cada vez Esto también es equivalente a:
tmp = from o in invoices.InvoiceCollection
orderby o.InvoiceOwner.LastName,
o.InvoiceOwner.FirstName,
o.InvoiceID
select o;
Si llama OrderBy
varias veces, se reordenará de manera efectiva la secuencia completamente tres veces ... por lo que la decisión final será efectiva el dominante. Usted puede (en LINQ a Objetos) escribe
foo.OrderBy(x).OrderBy(y).OrderBy(z)
lo que equivaldría a
foo.OrderBy(z).ThenBy(y).ThenBy(x)
como el orden de clasificación es estable, pero a pesar de todo no deben:
- Es difícil de leer
- No funciona bien (porque reordena toda la secuencia)
- Puede bien no trabajar en otros proveedores (p. LINQ to SQL)
- Básicamente no es cómo
OrderBy
fue diseñado para ser utilizado.
El objetivo de OrderBy
es proporcionar la proyección de pedido "más importante"; luego use ThenBy
(repetidamente) para especificar proyecciones de ordenamiento secundarias, terciarias, etc.
Efectivamente, creo que de esta manera: OrderBy(...).ThenBy(...).ThenBy(...)
le permite construir una única comparación compuesta por dos objetos, y luego ordenar la secuencia de una vez que la comparación utilizando compuesta. Eso es casi seguro lo que quieres.
Eso es lo que pensé, pero, por alguna razón, el OrderBy, ThenBy, ThenBy no parece estar ordenando correctamente, así que me preguntaba si lo estaba usando correctamente. – DazManCat
+1 para la parte 'Esto también es equivalente a' que estaba buscando. –
Tenga en cuenta que en la sintaxis de la consulta, la palabra clave para ordenar es realmente orderby, no order by. (Lo siento por la pedantería, solo quería decir que una vez corregí una publicación de Jon Skeet) – fostandy