tutorial - query linq c#




LINQ OrderDa più di un campo (4)

Devi usare ThenBy :

listOfPeople.OrderBy(person => person.LastName)
            .ThenBy(person => person.FirstName)

Ho una lista che ho bisogno di ordinare per due campi. Ho provato a utilizzare OrderBy in LINQ ma questo mi consente solo di specificare un campo. Sto cercando la lista da ordinare per il primo campo e poi se ci sono duplicati nel primo campo da ordinare per il secondo campo.

Ad esempio voglio che i risultati assomiglino a questo (ordinati per cognome e nome).

  • Adams, John
  • Smith, James
  • Smith, Peter
  • Thompson, Fred

Ho visto che è possibile utilizzare la sintassi SQL come per realizzare questo, ma sto cercando un modo per farlo con il metodo OrderBy.

IList<Person> listOfPeople = /*The list is filled somehow.*/
IEnumerable<Person> sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName, aPerson.FirstName); //This doesn't work.

I tuoi campi successivi dovrebbero essere ordinati usando il metodo ThenBy ()


Se si desidera utilizzare la sintassi del metodo, utilizzare ThenBy , come suggerito da altri:

listOfPeople.OrderBy(person => person.LastName)
            .ThenBy(person => person.FirstName)

Nella sintassi della query, lo stesso può essere realizzato praticamente come volevi: due chiavi di ordinamento separate da una virgola:

from person in listOfPeople
orderby person.LastName, person.FirstName
select person

Il codice precedente verrà effettivamente compilato nel codice che utilizza OrderBy() e ThenBy() , come nel primo esempio.

Inoltre, se desideri avere OrderBy() che accetta due (o più) chiavi di ordinamento, puoi sicuramente scriverlo come metodo di estensione su IEnumerable<T> che chiama internamente OrderBy() e ThenBy() .


Usa .ThenBy(aPerson=>field2);





linq