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