2011-01-06 16 views

Respuesta

28
var sortedCollection = 
    from item in collection 
    orderby item.Property1, item.Property2 descending, item.Property3 
    select item; 
22

préstamos de 101 LINQ Samples:

orderby p.Category, p.UnitPrice descending 

o como Lambda:

products.OrderBy(p => p.Category).ThenByDescending(p => p.UnitPrice); 
6

La respuesta de Steven funcionará, pero prefiero el método de encadenamiento a la sintaxis declarativa LINQ, p.

collection 
    .OrderBy(e => e.Property1) 
    .ThenByDescending(e => e.Property2) 
    .ThenBy(e => e.Property3) 
+0

¿Por qué querrías hacer eso? LINQ es mucho más legible que los métodos de extensión y lambda. – Steven

+7

Creo que es una cuestión de preferencia. Al leer/escribir código, no me gusta tener que cambiar el contexto entre el código C# basado en el método y el código declarativo LINQ. Me resulta más fácil leer y ver qué sucede cuando se usa el método de encadenamiento. Además, en última instancia, el LINQ se convierte en llamadas a métodos por el compilador, por lo que prefiero ir directo a la boca del caballo y hacer que mi código refleje más directamente los enunciados que se ejecutan (JIT compilado) en tiempo de ejecución. –

0

Para completar y como alternativa a las otras buenas respuestas aquí ...

También hay una sobrecarga o OrdenarPor que toma un IComparer, si se trata de un patrón de orden común que desea, a continuación, es posible que desee crear una clase que lo incorpore y pasarlo a la cláusula orderby, deje que se encargue de los pedidos más complejos, de esa manera es reutilizable para cuando usted ordene su consulta de la misma manera.