데이터 정렬(C#)
정렬 작업은 하나 이상의 특성을 기준으로 시퀀스의 요소를 정렬합니다. 첫 번째 정렬 기준은 요소에 대해 기본 정렬을 수행합니다. 두 번째 정렬 기준을 지정하면 각 기본 정렬 그룹 내의 요소를 정렬할 수 있습니다.
Important
이 샘플은 System.Collections.Generic.IEnumerable<T> 데이터 원본을 사용합니다. System.Linq.IQueryProvider 기반 데이터 원본은 System.Linq.IQueryable<T> 데이터 원본과 식 트리를 사용합니다. 식 트리에는 허용되는 C# 구문에 대한 제한 사항이 있습니다. 또한 EF Core와 같은 각 IQueryProvider
데이터 원본에는 더 많은 제한이 적용될 수 있습니다. 데이터 원본에 대한 설명서를 확인합니다.
다음 그림은 문자 시퀀스에 대한 사전순 정렬 작업의 결과를 보여 줍니다.
다음 섹션에는 데이터를 정렬하는 표준 쿼리 연산자 메서드가 나와 있습니다.
메서드
메서드 이름 | 설명 | C# 쿼리 식 구문 | 추가 정보 |
---|---|---|---|
OrderBy | 값을 오름차순으로 정렬합니다. | orderby |
Enumerable.OrderBy Queryable.OrderBy |
OrderByDescending | 값을 내림차순으로 정렬합니다. | orderby … descending |
Enumerable.OrderByDescending Queryable.OrderByDescending |
ThenBy | 2차 정렬을 오름차순으로 수행합니다. | orderby …, … |
Enumerable.ThenBy Queryable.ThenBy |
ThenByDescending | 2차 정렬을 내림차순으로 수행합니다. | orderby …, … descending |
Enumerable.ThenByDescending Queryable.ThenByDescending |
Reverse | 컬렉션에서 요소의 순서를 반대로 바꿉니다. | 해당 없음. | Enumerable.Reverse Queryable.Reverse |
참고 항목
이 문서의 다음 예제에서는 이 영역에 대한 공통 데이터 원본을 사용합니다.
각 Student
에는 학년 수준, 기본 부서 및 일련의 점수가 있습니다. Teacher
에는 교사가 수업을 진행하는 캠퍼스를 식별하는 City
속성도 있습니다. Department
에는 이름이 있고 부서장 역할을 하는 Teacher
에 대한 참조가 있습니다.
원본 리포지토리에서 예제 데이터 집합을 찾을 수 있습니다.
public enum GradeLevel
{
FirstYear = 1,
SecondYear,
ThirdYear,
FourthYear
};
public class Student
{
public required string FirstName { get; init; }
public required string LastName { get; init; }
public required int ID { get; init; }
public required GradeLevel Year { get; init; }
public required List<int> Scores { get; init; }
public required int DepartmentID { get; init; }
}
public class Teacher
{
public required string First { get; init; }
public required string Last { get; init; }
public required int ID { get; init; }
public required string City { get; init; }
}
public class Department
{
public required string Name { get; init; }
public int ID { get; init; }
public required int TeacherID { get; init; }
}
1차 오름차순 정렬
다음 예제에서는 LINQ 쿼리에 orderby
절을 사용하여 교사 배열을 성을 기준으로 오름차순으로 정렬하는 방법을 보여 줍니다.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
메서드 구문을 사용하여 작성된 이와 동일한 쿼리는 다음 코드에 나와 있습니다.
IEnumerable<string> query = teachers
.OrderBy(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
1차 내림차순 정렬
다음 예제에서는 LINQ 쿼리에 orderby descending
절을 사용하여 교사를 성의 내림차순으로 정렬하는 방법을 보여 줍니다.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last descending
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
메서드 구문을 사용하여 작성된 이와 동일한 쿼리는 다음 코드에 나와 있습니다.
IEnumerable<string> query = teachers
.OrderByDescending(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
2차 오름차순 정렬
다음 예제에서는 LINQ 쿼리에 orderby
절을 사용하여 1차 및 2차 정렬을 수행하는 방법을 보여 줍니다. 교사는 주로 도시를 기준으로 정렬되고 부차적으로 성으로 정렬되며, 둘 다 오름차순으로 정렬됩니다.
IEnumerable<(string, string)> query = from teacher in teachers
orderby teacher.City, teacher.Last
select (teacher.Last, teacher.City);
foreach ((string last, string city) in query)
{
Console.WriteLine($"City: {city}, Last Name: {last}");
}
메서드 구문을 사용하여 작성된 이와 동일한 쿼리는 다음 코드에 나와 있습니다.
IEnumerable<(string, string)> query = teachers
.OrderBy(teacher => teacher.City)
.ThenBy(teacher => teacher.Last)
.Select(teacher => (teacher.Last, teacher.City));
foreach ((string last, string city) in query)
{
Console.WriteLine($"City: {city}, Last Name: {last}");
}
2차 내림차순 정렬
다음 예제에서는 LINQ 쿼리에 orderby descending
절을 사용하여 1차 정렬을 오름차순으로 수행한 다음 2차 정렬을 내림차순으로 수행하는 방법을 보여 줍니다. 교사는 주로 도시를 기준으로 정렬되고 부차적으로 성으로 정렬됩니다.
IEnumerable<(string, string)> query = from teacher in teachers
orderby teacher.City, teacher.Last descending
select (teacher.Last, teacher.City);
foreach ((string last, string city) in query)
{
Console.WriteLine($"City: {city}, Last Name: {last}");
}
메서드 구문을 사용하여 작성된 이와 동일한 쿼리는 다음 코드에 나와 있습니다.
IEnumerable<(string, string)> query = teachers
.OrderBy(teacher => teacher.City)
.ThenByDescending(teacher => teacher.Last)
.Select(teacher => (teacher.Last, teacher.City));
foreach ((string last, string city) in query)
{
Console.WriteLine($"City: {city}, Last Name: {last}");
}
참고 항목
.NET