then - order by two fields linq c#
¿Cómo usar orderby con 2 campos en linq? (5)
Esta pregunta ya tiene una respuesta aquí:
- Múltiple "ordenar por" en LINQ 6 respuestas
Digamos que tengo estos valores en una tabla de base de datos
id = 1
StartDate = 1/3/2010
EndDate = 1/3/2010
id = 2
StartDate = 1/3/2010
EndDate = 1/9/2010
Ahora tengo hasta ahora este orden por mi linq
var hold = MyList.OrderBy(x => x.StartDate).ToList();
Quiero pedirlo sin embargo también usando la fecha de finalización.
Al igual que el orden en el que me gustaría esto como
id 2
id 1
Entonces endDates
que son mayores van primero. No estoy seguro si necesito cambiar esto para usar alguna función de comparación o algo.
Si tiene dos o más campos para ordenar, intente esto:
var soterdList = initialList.OrderBy(x => x.Priority).
ThenBy(x => x.ArrivalDate).
ThenBy(x => x.ShipDate);
Puede agregar otros campos con el clasle "ThenBy"
Use ThenByDescending
:
var hold = MyList.OrderBy(x => x.StartDate)
.ThenByDescending(x => x.EndDate)
.ToList();
También puede usar la sintaxis de la 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 devuelve OrderBy
. Ver también el método relacionado ThenBy
.
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
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate);
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate);
Tenga en cuenta que también puede utilizar la palabra clave Descending en OrderBy (en caso de que lo necesite). Entonces otra posible respuesta es:
MyList.OrderByDescending(x => x.StartDate).ThenByDescending(x => x.EndDate);