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) 방식으로 동작하므로, 쿼리를 정의하는 시점이 아니라 실제로 결과를 순회하는 시점에 필터링이 수행된다는 점도 기억해 두면 좋습니다.