본문 바로가기

Develop/.NET 가이드

[C#] LINQ 사용방법 - Where

반응형

LINQ
LINQ

개요

LINQ 문법은 간단합니다. 하지만 간단한 구문을 복합하여 사용하려고 하면 어떻게 해야 할지 감이 잡히지 않습니다. 그래서 괜히 스택오버플로우에 비슷한 쿼리 문이 없나 뒤적거리게 됩니다. LINQ 개념은 쉽게 설명된 블로그 글도 많고, 개념 자체는 어렵지 않아 금방 이해하게 됩니다. 하지만 실제로 사용할 때 애를 먹는 이유는 LINQ 를 실제로 사용해 본 경험이 부족하기 때문입니다. 그래서 간단한 예제부터 복잡한 예제까지 순차적으로 LINQ 문법의 경험치를 올릴 수 있도록 준비해보았습니다.

Where

LINQ 에서 Where 절은 질의 결과를 제한하는 절입니다. 오직 Where 절 조건에 맞는 요소만이 결과 시퀀스에 추가되어 출력됩니다.

LINQ 쿼리 구조

아래 예제는 Where 절을 사용하여 배열 내에서 5 보다 낮은 숫자를 출력합니다.

            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            var lowNums = from num in numbers
                          where num < 5
                          select num;

            // lowNums = { 4, 1, 3, 2, 0 };

속성으로 필터링하기

아래 예제는 Where 절로 제품 리스트에서 재고가 없는 제품을 추려내 출력합니다.

            List<Product> products = GetProductList();

            var soldOutProducts = from prod in products
                                  where prod.UnitsInStock == 0
                                  select prod;

Where 절에서 속성 값을 활용하여 필터링을 할 수 있습니다.

다수 속성으로 필터링하기

아래 예제는 Where 절로 제품 리스트에서 재고가 있고 가격이 비싼 제품을 추려내 출력합니다.

            List<Product> products = GetProductList();

            var expensiveInStockProducts = from prod in products
                                           where prod.UnitsInStock > 0 && prod.UnitPrice > 3.00M
                                           select prod;

Where 절에서 여러 속성 값을 한번에 활용할 수 있습니다.

추려낸 결과 값 활용하기

아래 예제는 전체 고객 목록에서 WA 지역에 거주하는 고객을 추려낸 뒤, 추려낸 고객의 정보를 출력합니다.

            List<Customer> customers = GetCustomerList();

            var waCustomers = from cust in customers
                              where cust.Region == "WA"
                              select cust;

쿼리 결과는 IEnumerable로 리스트처럼 사용할 수 있습니다.

인덱스 값으로 필터링

아래 예제는 인덱스 값보다 짧은 길이를 가진 숫자 단어를 출력합니다.

            string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

            var shortDigits = digits.Where((digit, index) => digit.Length < index);

            // shortDigits = { "five", "six", "seven", "eight", "nine" };

소스 시퀀스의 인덱스 값을 Where 절에서 활용할 수 있습니다.

예제에서 Where 절이 아닌 Where 메서드가 사용되었지만 절 형태든 메서드 형태는 본질적으론 동일합니다.

반응형