c# - sintaxis - LINQ OrderBy con más de un campo
sintaxis linq c# (6)
La forma de ordenar una lista con más archivos es la siguiente:
var soterdList = initialList.OrderBy(x => x.Priority).
ThenBy(x => x.ArrivalDate).
ThenBy(x => x.ShipDate);
Puede agregar otros campos con el clasle "ThenBy"
Tengo una lista que necesito ordenar por dos campos. Intenté usar OrderBy en LINQ, pero eso solo me permite especificar un campo. Estoy buscando la lista para ser ordenada por el primer campo y luego si hay algún duplicado en el primer campo para ordenar por el segundo campo.
Por ejemplo, quiero que los resultados se vean así (ordenados por apellido, luego nombre).
- Adams, John
- Smith, James
- Smith, Peter
- Thompson, Fred
He visto que puede usar la sintaxis SQL como para lograr esto, pero estoy buscando una forma 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.
Necesitas usar ThenBy
:
listOfPeople.OrderBy(person => person.LastName)
.ThenBy(person => person.FirstName)
Si desea usar la sintaxis del método, use ThenBy , como otros sugirieron:
listOfPeople.OrderBy(person => person.LastName)
.ThenBy(person => person.FirstName)
En la sintaxis de consulta, lo mismo se puede lograr de la manera que usted quería: 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 a código que utiliza OrderBy()
y ThenBy()
, como en el primer ejemplo.
Además, si desea que OrderBy()
tome dos (o más) claves de clasificación, puede escribir eso como un método de extensión en IEnumerable<T>
que internamente llama a OrderBy()
y ThenBy()
.
Sus campos posteriores deben ordenarse utilizando el método ThenBy ()
Utilice .ThenBy(aPerson=>field2);
var sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName).ThenBy(a => aPerson.FirstName);