LINQ에서 분할은 요소를 다시 정렬하지 않고 입력 시퀀스를 두 섹션으로 나눈 다음 섹션 중 하나를 반환하는 작업을 의미합니다.
중요합니다
이 샘플은 System.Collections.Generic.IEnumerable<T> 데이터 원본을 사용합니다.
System.Linq.IQueryProvider 기반 데이터 원본은 System.Linq.IQueryable<T> 데이터 원본과 식 트리를 사용합니다. 식 트리에는 허용되는 C# 구문에 대한 제한 사항이 있습니다. 또한 IQueryProvider은 EF Core와 같이 더 많은 제한을 가할 수 있습니다. 데이터 원본에 대한 설명서를 확인합니다.
다음 그림에서는 문자 시퀀스에 대한 세 가지 분할 작업의 결과를 보여 줍니다. 첫 번째 작업은 시퀀스의 처음 세 요소를 반환합니다. 두 번째 작업은 처음 세 요소를 건너뛰고 나머지 요소를 반환합니다. 세 번째 연산은 시퀀스의 처음 두 요소를 건너뛰고 다음 세 개의 요소를 반환합니다.
다음 섹션에는 시퀀스를 파티션하는 표준 쿼리 연산자 메서드가 나열되어 있습니다.
운영자
| 메서드 이름 | 설명 | C# 쿼리 식 구문 | 추가 정보 |
|---|---|---|---|
| 건너뛰기 | 시퀀스에서 지정된 위치까지 요소를 건너뜁니다. | 적용할 수 없습니다. | Enumerable.Skip Queryable.Skip |
| 조건을 만족할 때까지 건너뛰기 | 요소가 조건을 충족하지 않을 때까지 조건자 함수를 기반으로 요소를 건너뜁니다. | 적용할 수 없습니다. | Enumerable.SkipWhile Queryable.SkipWhile |
| 잡다 | 시퀀스에서 지정된 위치까지 요소를 가져옵니다. | 적용할 수 없습니다. | Enumerable.Take Queryable.Take |
| 조건 충족 시 가져오기 | 요소가 조건을 충족하지 않을 때까지 조건자 함수를 기반으로 요소를 사용합니다. | 적용할 수 없습니다. | Enumerable.TakeWhile Queryable.TakeWhile |
| 청크 | 시퀀스의 요소를 지정된 최대 크기의 청크로 분할합니다. | 적용할 수 없습니다. | Enumerable.Chunk Queryable.Chunk |
다음 예제는 모두 0에서 7까지의 숫자 시퀀스를 생성하는 데 사용합니다 Enumerable.Range(Int32, Int32) .
비고
표준 쿼리 연산자 개요 문서에서 이 영역에 대한 공통 데이터 원본을 참조할 수 있습니다.
이 메서드를 Take 사용하여 시퀀스의 첫 번째 요소만 사용합니다.
foreach (int number in Enumerable.Range(0, 8).Take(3))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2
이 메서드를 Skip 사용하여 시퀀스의 첫 번째 요소를 건너뛰고 나머지 요소를 사용합니다.
foreach (int number in Enumerable.Range(0, 8).Skip(3))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 3
// 4
// 5
// 6
// 7
두 가지 메서드는 시퀀스에서 요소를 가져가고 건너뛸 수 있습니다. 그러나 이러한 메서드는 설정된 수의 요소 대신 조건에 따라 요소를 건너뛰거나 사용합니다.
TakeWhile 는 요소가 조건과 일치하지 않을 때까지 시퀀스의 요소를 사용합니다.
foreach (int number in Enumerable.Range(0, 8).TakeWhile(n => n < 5))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2
// 3
// 4
SkipWhile 조건이 true이면 첫 번째 요소를 건너뜁니다. 조건과 일치하지 않는 첫 번째 요소와 모든 후속 요소가 반환됩니다.
foreach (int number in Enumerable.Range(0, 8).SkipWhile(n => n < 5))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 5
// 6
// 7
지정된 Chunk에 따라 size 연산자는 시퀀스의 요소를 분할하는 데 사용됩니다.
int chunkNumber = 1;
foreach (int[] chunk in Enumerable.Range(0, 8).Chunk(3))
{
Console.WriteLine($"Chunk {chunkNumber++}:");
foreach (int item in chunk)
{
Console.WriteLine($" {item}");
}
Console.WriteLine();
}
// This code produces the following output:
// Chunk 1:
// 0
// 1
// 2
//
//Chunk 2:
// 3
// 4
// 5
//
//Chunk 3:
// 6
// 7
앞의 C# 코드는 다음과 같습니다.
- Enumerable.Range(Int32, Int32)을(를) 사용하여 숫자 시퀀스를 생성합니다.
- 연산자를
Chunk적용하여 시퀀스를 최대 크기가 3인 청크로 분할합니다.
참고하십시오
.NET