모든 LINQ의 쿼리 작업은 다음과 같은 작업으로 구성된다.
int[] numbers = [0, 1, 2, 3];
var query = from num in numbers
where num % 2 == 0
select num;
foreach(int n in query) Console.Write(n);
즉시 결과를 반환한다. (Count(), ToList(), First(), Average() 등)
지연 실행은 쿼리 변경 시점이 아닌 실행 시점의 데이터 상태를 반영한다.
결과를 요청할 때마다 실행된다. (foreach, .ToList() 등 호출 시점)
지연된 실행을 하는 쿼리 연산자는 스트리밍 또는 비스트리밍으로 분류할 수 있다.
스트리밍 연산자: 결과를 생성하기 전에 전체 데이터를 읽을 필요가 없이 즉시 결과를 반환한다. (Where, Select, Take 등)
비스트리밍 연산자: 전체 데이터를 읽고나서 처리한다. (OrderBy, GroupBy 등)