Tengo una lista que necesito ordenar por dos campos. Intenté usar OrderBy en LINQ pero eso solo me permite especificar un campo. Estoy buscando que la lista se ordene por el primer campo y luego, si hay duplicados en el primer campo, ordenar por el segundo campo.
Por ejemplo, quiero que los resultados se vean así (ordenados por apellido y luego por nombre).
- Adams, John
- Smith, James
- Smith, Peter
- Thompson, Fred
He visto que puede usar la sintaxis similar a SQL para lograr esto, pero estoy buscando una manera de hacerlo con el método OrderBy.
IList<Person> listOfPeople = /*The list is filled somehow.*/
IEnumerable<Person> sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName, aPerson.FirstName); //This doesn't work.
Si desea utilizar la sintaxis del método, utilice
ThenBy()
, como sugirieron otros:En la sintaxis de consulta, se puede lograr lo mismo de la manera que desea: dos claves de clasificación separadas por una coma:
from person in listOfPeople orderby person.LastName, person.FirstName select person
El código anterior se compilará en realidad en el código que usa
OrderBy()
yThenBy()
, como en el primer ejemplo.Además, si desea que
OrderBy()
eso requiera dos (o más) claves de clasificación, ciertamente puede escribirlo como un método de extensión enIEnumerable<T>
las llamadas internasOrderBy()
yThenBy()
.fuente
Los campos siguientes deben ordenarse mediante el método ThenBy ()
fuente
Utilizar
.ThenBy(aPerson=>field2);
fuente
var sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName).ThenBy(a => aPerson.FirstName);
fuente
La forma de ordenar una lista con más archivados es la siguiente:
var soterdList = initialList.OrderBy(x => x.Priority). ThenBy(x => x.ArrivalDate). ThenBy(x => x.ShipDate);
Puede agregar otros campos con la clase "ThenBy"
fuente