2010-01-01 28 views
79

Decir que tengo estos valores en una tabla de base de datos¿Cómo usar orderby con 2 campos en linq?

id = 1 
StartDate = 1/3/2010 
EndDate = 1/3/2010 

id = 2 
StartDate = 1/3/2010 
EndDate = 1/9/2010 

Ahora tengo lo que va del OrdenarPor para mi LINQ

var hold = MyList.OrderBy(x => x.StartDate).ToList(); 

quiero pedirlo sin embargo, también utilizando la fecha de finalización.

Al igual que el orden que querría esto en tan

id 2 
id 1 

Así endDates que son mayores ir primero. No estoy seguro si necesito cambiar esto para usar alguna función de comparación o algo.

+4

posible duplicado de [Múltiple "ordenar por" en LINQ] (http://stackoverflow.com/questions/298725/multiple-order-by-in-linq) – Moes

Respuesta

135
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate); 
38

Uso ThenByDescending:

var hold = MyList.OrderBy(x => x.StartDate) 
       .ThenByDescending(x => x.EndDate) 
       .ToList(); 

También puede utilizar la sintaxis de consulta y decir:

var hold = (from x in MyList 
      orderby x.StartDate, x.EndDate descending 
      select x).ToList(); 

ThenByDescending es un método de extensión en IOrderedEnumerable que es lo que se devuelve por OrderBy. Ver también el método relacionado ThenBy.

+0

gracias, ¿también sabría el tipo de retención de estructura? Una lista de artículos MyList? – BKSpurgeon

3

VB.NET

MyList.OrderBy(Function(f) f.StartDate).ThenByDescending(Function(f) f.EndDate) 

O

From l In MyList Order By l.StartDate Ascending, l.EndDate Descending 
+2

¿Hay alguna diferencia entre 'From l In MyList Order By l.StartDate Ascending Order By l.EndDate Descending' y' From l In MyList Order By l.StartDate Ascending, l.EndDate Descending'? – Oleksandr

+0

@Oleksandr Sí, la variante de Abdul es equivalente a simplemente hacer el segundo pedido, por lo que no es correcto. – John

+0

@John y @ oleksandr Gracias por identificar el error, no se ha corregido –

4
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate); 

Tenga en cuenta que puede utilizar la palabra clave, así descendente en el OrdenarPor (en caso de que necesite). Así que otra respuesta posible es:

MyList.OrderByDescending(x => x.StartDate).ThenByDescending(x => x.EndDate); 
1

Si tiene dos o más campo para ordenar intente esto:

var soterdList = initialList.OrderBy(x => x.Priority). 
            ThenBy(x => x.ArrivalDate). 
            ThenBy(x => x.ShipDate); 

Usted puede agregar otros campos con clasole "ThenBy"

Cuestiones relacionadas