본문 바로가기
C#

C# LINQ에서 Where 조건문 여러 개 사용하기: 효율적인 필터링 방법

by 코딩이라구 2025. 3. 7.

C#에서 LINQ의 Where 조건문을 여러 개 사용하는 방법을 배우고, 다양한 예제와 실제 사용 사례를 통해 효과적으로 데이터를 필터링하는 방법을 알아봅니다.

C#-LINQ-WHERE-여러개
C# LINQ WHERE 조건 여러개 사용 방법 및 예제


목차

  1. LINQ의 Where 조건문이란?
  2. Where 조건문 여러 개 사용하는 방법
    • 단일 Where에서 여러 조건 사용
    • 여러 Where 메서드 사용
  3. 람다 표현식과 Where 조건문 조합
  4. 동적으로 조건을 추가하는 방법
  5. 실제 사용 사례 및 예제 코드
  6. 마무리 및 최적화 팁

1. LINQ의 Where 조건문이란?

C# LINQ의 Where 메서드는 컬렉션에서 특정 조건을 만족하는 요소만 필터링하는 데 사용됩니다. 여러 조건을 적용해야 할 때는 다양한 방법을 활용할 수 있으며, 성능을 고려한 최적화가 중요합니다.


2. Where 조건문 여러 개 사용하는 방법

2.1 단일 Where에서 여러 조건 사용

가장 간단한 방법은 && 연산자를 사용하여 여러 조건을 한 번에 적용하는 것입니다.

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

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        var evenNumbersGreaterThanFive = numbers
            .Where(n => n % 2 == 0 && n > 5) // 짝수이면서 5보다 큰 수 필터링
            .ToList();

        Console.WriteLine(string.Join(", ", evenNumbersGreaterThanFive)); // 출력: 6, 8, 10
    }
}

2.2 여러 Where 메서드 사용

Where 메서드를 여러 개 사용하여 조건을 분리할 수도 있습니다. 이 방식은 코드 가독성을 높이는 데 유용합니다.

var result = numbers
    .Where(n => n % 2 == 0)  // 짝수 필터링
    .Where(n => n > 5)       // 5보다 큰 수 필터링
    .ToList();

 


3. 람다 표현식과 Where 조건문 조합

람다 표현식을 활용하면 더욱 유연한 필터링이 가능합니다.

Func<int, bool> isEven = n => n % 2 == 0;
Func<int, bool> isGreaterThanFive = n => n > 5;

var filteredNumbers = numbers
    .Where(isEven)
    .Where(isGreaterThanFive)
    .ToList();

 


4. 동적으로 조건을 추가하는 방법

조건이 동적으로 변경될 경우, IQueryable을 활용하여 조건을 추가할 수 있습니다.

var query = numbers.AsQueryable();

if (true) // 예제에서는 항상 true지만, 조건에 따라 다르게 설정 가능
{
    query = query.Where(n => n % 2 == 0);
}

if (true) // 조건 추가
{
    query = query.Where(n => n > 5);
}

var result = query.ToList();

 


5. 실제 사용 사례 및 예제 코드

5.1 객체 리스트 필터링

다음은 여러 개의 Where 조건을 사용하여 특정 데이터를 필터링하는 예제입니다.

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { Name = "이명연", Age = 28 },
            new Person { Name = "홍승익", Age = 28 },
            new Person { Name = "전지은", Age = 31 },
            new Person { Name = "신중빈", Age = 31 }
        };

        var filteredPeople = people
            .Where(p => p.Age >= 30) // 30세 이상
            .Where(p => p.Name.StartsWith("이")) // 이름이 'C'로 시작
            .ToList();

        foreach (var person in filteredPeople)
        {
            Console.WriteLine($"{person.Name}, {person.Age}");
        }
    }
}

5.2 데이터베이스 조회 시 활용 (Entity Framework)

Entity Framework에서 LINQ의 Where 조건을 여러 개 사용하는 예제입니다.

using (var context = new MyDbContext())
{
    var query = context.Users.AsQueryable();

    if (true) // 예제 조건
    {
        query = query.Where(u => u.IsActive);
    }

    if (true) // 나이 필터
    {
        query = query.Where(u => u.Age >= 18);
    }

    var result = query.ToList();
}

이런 방식으로 데이터베이스 쿼리를 동적으로 구성할 수 있습니다.


6. 마무리 및 최적화 팁

  • Where 조건을 너무 많이 분리하면 성능 저하가 발생할 수 있습니다.
  • IQueryable을 사용하면 필요할 때만 필터링이 적용되므로 성능이 향상됩니다.
  • 조건을 미리 변수로 선언하여 코드의 가독성을 높일 수 있습니다.
  • 불필요한 Where 메서드는 제거하고, 최대한 한 번의 Where로 처리하는 것이 좋습니다.

이제 LINQ의 Where 조건을 여러 개 사용할 때 어떤 방법이 가장 적절한지 이해하셨을 것입니다. 필요에 따라 적절한 방식으로 LINQ를 활용하여 효율적인 데이터를 필터링해 보세요!

 

댓글