C#은 흐름을 제어할 수 있는 for, while, do/while, foreach 등의 다양한 반복 구문을 제공하기 때문에
일상적인 개발에는 부족함이 없다. 하지만 쿼리 구문을 사용하는 것이 반복문을 사용하는 것보다 더
나은 경우가 꽤 있다.
쿼리 구문을 사용하면 프로그램의 논리를 명령형 방식에서 선언적인 방식으로 전환할 수 있다.
쿼리 구문을 이용하면 질의의 내용을 구성할 수 있을 뿐 아니라 개별 항목에 대해 수행하려는 작업의
수행 시기를 연기할 수 있다. 쿼리 구문이나 메서드 호출 구문 중 어떤 방식을 쓰더라도 이러한 장점
은 동일하다. 쿼리 구문이나 메서드 호출 구문을 확장하여 사용하면 루프를 이용하는 것보다 사용자
의 의도를 더 명확하게 드러낼 수 있는 부가적인 장점도 있다.
다음 코드는 명령형 방식으로 배열을 구성하고 그 내용을 출력하는 예다.
var foo = new int[100];
for (var num = 0; num < foo.Length; num++)
foo[num] = num * num;
foreach (int i in foo)
Console.WriteLine(i.ToString());
이 간단한 예조차도 수행할 작업 그 자체보다 작업S을 어떻게 수행할지에 초점을 두어 코드가 작성되
었음에 주목하기 바란다. 쿼리 구문을 이용하여 동일한 작업을 수행하는 코드를 재작성하면 가독성
과 재사용성이 훨씬 좋아진다.
이를 위해 먼저 배열을 구성하는 코드를 다음과 같이 쿼리의 결과를 얻어내 형태로 변경할 수 있다.
var foo = (from n in Enumerable.Range(0, 100)
select n * n).ToArray();