Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# LINQ Where 메서드 완벽 정리 – 조건에 맞는 요소 필터링하기

C# LINQ Where 메서드란?

LINQ의 Where 메서드는 배열이나 컬렉션에서 지정한 조건자(predicate)를 만족하는 요소만 골라내는 필터링 메서드입니다. 조건자는 각 요소를 평가하는 람다 식으로 전달되며, 조건이 참(true)인 요소만 최종 결과에 포함됩니다.

아래 예제에서는 조건자가 70 이상인 요소를 검사하도록 작성했습니다.

Where((n, index) => n >= 70);

여기서 람다 식은 두 개의 매개변수를 받습니다. 첫 번째 n은 현재 요소의 값, 두 번째 index는 해당 요소의 인덱스를 나타냅니다. 이처럼 인덱스까지 활용하면 위치 기반의 복잡한 필터링도 가능합니다.

예제 코드

using System;
using System.Linq;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      int[] arr = { 10, 30, 20, 15, 90, 85, 40, 75 };

      Console.WriteLine("Array:");
      foreach (int a in arr)
         Console.WriteLine(a);

      // 70 이상인 요소만 추출
      var myQuery = arr.AsQueryable().Where((n, index) => n >= 70);

      Console.WriteLine("Elements above 70...:");
      foreach (int res in myQuery)
         Console.WriteLine(res);
   }
}

실행 결과

Array:
10
30
20
15
90
85
40
75
Elements above 70...:
90
85
75

코드 설명

위 예제의 동작 흐름은 다음과 같습니다.

1. 배열 선언: 8개의 정수로 구성된 배열 arr을 생성하고, foreach 문으로 전체 요소를 출력합니다.

2. 쿼리 실행: AsQueryable()로 배열을 쿼리 가능한 형태로 변환한 뒤, Where 메서드에 (n, index) => n >= 70 조건자를 전달하여 70 이상인 요소만 걸러냅니다.

3. 결과 확인: 필터링된 시퀀스를 다시 foreach로 순회하면 90, 85, 75 세 개의 값만 출력되는 것을 확인할 수 있습니다.

LINQ의 Where는 지연 실행(lazy evaluation) 방식으로 동작하므로, 쿼리를 정의하는 시점이 아니라 실제로 결과를 순회하는 시점에 필터링이 수행된다는 점도 기억해 두면 좋습니다.