[c#] 둘 이상의 필드가있는 LINQ OrderBy

두 개의 필드로 정렬해야하는 목록이 있습니다. LINQ에서 OrderBy를 사용해 보았지만 하나의 필드 만 지정할 수 있습니다. 첫 번째 필드로 정렬 할 목록을 찾고 있고 두 번째 필드를 기준으로 정렬 할 첫 번째 필드에 중복 항목이 있는지 확인합니다.

예를 들어 결과가 다음과 같이 표시되기를 원합니다 (성 다음에 이름으로 정렬).

  • 아담스, 존
  • 스미스, 제임스
  • 스미스, 피터
  • 톰슨, 프레드

이 작업을 수행하기 위해 구문과 같은 SQL을 사용할 수 있다는 것을 보았지만 OrderBy 메서드를 사용하여 수행하는 방법을 찾고 있습니다.

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



답변

다음을 사용해야합니다 ThenBy.

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


답변

메서드 구문을 사용하려면 ThenBy()다른 사람들이 제안한대로를 사용하십시오 .

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

쿼리 구문에서 원하는 방식으로 동일한 작업을 수행 할 수 있습니다. 쉼표로 구분 된 두 개의 정렬 키 :

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

위의 코드는 실제로 첫 번째 예제에서 OrderBy()ThenBy()같이 및를 사용하는 코드로 컴파일됩니다 .

당신이하려는 경우 또한, OrderBy()그 두 소요 (또는 그 이상)의 정렬 키, 당신은 확실히에 확장 방법으로 그것을 쓸 수 있습니다 IEnumerable<T>즉 내부적으로 호출 OrderBy()하고 ThenBy().


답변

다음 필드는 ThenBy () 메서드를 사용하여 정렬해야합니다.


답변

사용하다 .ThenBy(aPerson=>field2);


답변

var sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName).ThenBy(a => aPerson.FirstName);


답변

더 많은 파일이있는 목록을 주문하는 방법은 다음과 같습니다.

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

clasole “ThenBy”로 다른 필드를 추가 할 수 있습니다.


답변