다음을 통해 공유


실행 방식별 표준 쿼리 연산자 분류(Visual Basic)

표준 쿼리 연산자 메서드의 LINQ to Objects 구현은 즉시 실행 또는 지연이라는 두 가지 주요 방법 중 하나로 실행됩니다. 지연된 실행을 사용하는 쿼리 연산자는 스트리밍과 비 스트리밍의 두 범주로 나눌 수도 있습니다. 다른 쿼리 연산자가 실행되는 방법을 알고 있는 경우 지정된 쿼리에서 얻는 결과를 이해하는 데 도움이 될 수 있습니다. 데이터 원본이 변경되거나 다른 쿼리 위에 쿼리를 빌드하는 경우 특히 그렇습니다. 이 항목에서는 해당 실행 방식에 따라 표준 쿼리 연산자를 분류합니다.

실행 방식

즉시

즉시 실행은 데이터 원본을 읽고 쿼리가 선언된 코드의 지점에서 작업이 수행됨을 의미합니다. 열거할 수 없는 단일 결과를 반환하는 모든 표준 쿼리 연산자는 즉시 실행됩니다.

연기됨

지연된 실행은 쿼리가 선언된 코드의 지점에서 작업이 수행되지 않음을 의미합니다. 이 작업은 쿼리 변수가 열거된 경우에만 수행됩니다(예: 문을 사용하여 For Each ). 즉, 쿼리 실행 결과는 쿼리가 정의될 때가 아니라 쿼리가 실행될 때 데이터 원본의 내용에 따라 달라집니다. 쿼리 변수가 여러 번 열거되는 경우 결과가 매번 다를 수 있습니다. 거의 모든 표준 쿼리 연산자는, 반환 형식이 IEnumerable<T> 또는 IOrderedEnumerable<TElement>인 경우, 지연된 방식으로 실행됩니다.

지연된 실행을 사용하는 쿼리 연산자는 스트리밍 또는 비 스트리밍으로 추가로 분류할 수 있습니다.

스트리밍

스트리밍 연산자는 요소를 생성하기 전에 모든 원본 데이터를 읽을 필요가 없습니다. 실행 시 스트리밍 연산자는 읽을 때 각 원본 요소에 대해 해당 작업을 수행하고 해당하는 경우 요소를 생성합니다. 스트리밍 연산자는 결과 요소를 생성할 수 있을 때까지 원본 요소를 계속 읽습니다. 즉, 둘 이상의 원본 요소를 읽어 하나의 결과 요소를 생성할 수 있습니다.

비 스트리밍

비 스트리밍 연산자는 결과 요소를 생성하기 전에 모든 원본 데이터를 읽어야 합니다. 정렬 또는 그룹화와 같은 작업은 이 범주에 속합니다. 실행 시 비 스트리밍 쿼리 연산자는 모든 원본 데이터를 읽고, 데이터 구조에 배치하고, 작업을 수행하고, 결과 요소를 생성합니다.

분류 테이블

다음 표에서는 실행 방법에 따라 각 표준 쿼리 연산자 메서드를 분류합니다.

비고

연산자가 두 열로 표시된 경우 두 개의 입력 시퀀스가 작업에 포함되고 각 시퀀스가 다르게 평가됩니다. 이러한 경우 항상 지연된 스트리밍 방식으로 평가되는 매개 변수 목록의 첫 번째 시퀀스입니다.

표준 쿼리 연산자 반환 형식 즉시 실행 지연된 스트리밍 실행 지연된 비 스트리밍 실행
Aggregate TSource X
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average 단일 숫자 값 X
Cast IEnumerable<T> X
Concat IEnumerable<T> X
Contains Boolean X
Count Int32 X
DefaultIfEmpty IEnumerable<T> X
Distinct IEnumerable<T> X
ElementAt TSource X
ElementAtOrDefault TSource X
Empty IEnumerable<T> X
Except IEnumerable<T> X X
First TSource X
FirstOrDefault TSource X
GroupBy IEnumerable<T> X
GroupJoin IEnumerable<T> X X
Intersect IEnumerable<T> X X
Join IEnumerable<T> X X
Last TSource X
LastOrDefault TSource X
LongCount Int64 X
Max 단일 숫자 값, TSource 또는 TResult X
Min 단일 숫자 값, TSource 또는 TResult X
OfType IEnumerable<T> X
OrderBy IOrderedEnumerable<TElement> X
OrderByDescending IOrderedEnumerable<TElement> X
Range IEnumerable<T> X
Repeat IEnumerable<T> X
Reverse IEnumerable<T> X
Select IEnumerable<T> X
SelectMany IEnumerable<T> X
SequenceEqual Boolean X
Single TSource X
SingleOrDefault TSource X
Skip IEnumerable<T> X
SkipWhile IEnumerable<T> X
Sum 단일 숫자 값 X
Take IEnumerable<T> X
TakeWhile IEnumerable<T> X
ThenBy IOrderedEnumerable<TElement> X
ThenByDescending IOrderedEnumerable<TElement> X
ToArray TSource 배열 X
ToDictionary Dictionary<TKey,TValue> X
ToList IList<T> X
ToLookup ILookup<TKey,TElement> X
Union IEnumerable<T> X
Where IEnumerable<T> X

참고하십시오