둘 이상의 필드가있는 LINQ OrderBy


82

두 개의 필드로 정렬해야하는 목록이 있습니다. 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.

답변:


169

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

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

1
전체 설명은 다음과 같습니다. weblogs.asp.net/zeeshanhirani/archive/2008/04/16/…
DigitalNomad

이것은 Lambda .. LINQ 솔루션이 필요합니다 @svick이 LINQ에 있습니다.
Ravi Ram

5
무슨 말인지 잘 모르겠습니다. 쿼리 구문은 위의 메서드 구문에 대한 설탕 일뿐입니다. 둘 다 "LINQ"입니다. msdn.microsoft.com/en-us/library/vstudio/bb397947.aspx를 참조 하십시오. 그리고 질문을 읽으면 그는 특히 메서드 구문 버전을 요청하고 있습니다.
tzaman

24

메서드 구문을 사용하려면 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().




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

2

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.