본문 바로가기
개발언어/C#

[C#] LINQ 데이터 필터링 방법 - Where절

by 창용이랑 2023. 5. 22.
728x90

Where절

LINQ의 Where문은 원본 데이터에서 일부 조건을 만족하는 데이터를 추출해야하는 경우 사용됩니다.

 

예를 들자면, 아래 조건을 만족하는 데이터를 추출하기 위해 Where문을 사용할 수 있습니다.

- 이름이 "A"로 시작하는 문자열만 추출

- 급여가 4,000만원 이상인 직원을 추출

- 나이가 20세 이상인 사람을 추출

 

예제 1. Where절 사용 방법

Where절을 사용하는 간단한 예제입니다. int 타입의 List에서 10보다 큰 숫자를 추출합니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> liNum = new List<int>()
    {
      1, 3, 5, 6, 7, 9, 10
    };

    // 1. 질의 구문(Query Syntax)
    List<int> linqQueryResult = (from   num in liNum
                                 where  num > 5
                                 select num).ToList();

    // 2. 메서드 구문(Method Syntax)
    List<int> linqMethodResult = liNum.Where(num => num > 5).ToList();


    Console.WriteLine("질의 구문");
    foreach (int num in linqQueryResult)
      Console.Write(num + " ");

    Console.WriteLine("\n메서드 구문");
    foreach (int num in linqMethodResult)
      Console.Write(num + " ");
  }
}

[실행 결과]

질의 구문
6 7 9 10
메서드 구문
6 7 9 10

다음 예제는 Where절에 여러 조건문을 작성하는 방법입니다. 10보다 크고 홀수인 숫자를 추출합니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> liNum = new List<int>()
    {
      1, 3, 5, 6, 7, 9, 10
    };

    // 1. 질의 구문(Query Syntax)
    List<int> linqQueryResult = (from   num in liNum
                                 where  num > 5 && num % 2 != 0
                                 select num).ToList();

    // 2. 메서드 구문(Method Syntax)
    List<int> linqMethodResult = liNum.Where(num => num > 5 && num % 2 != 0).ToList();


    Console.WriteLine("질의 구문");
    foreach (int num in linqQueryResult)
      Console.Write(num + " ");

    Console.WriteLine("\n메서드 구문");
    foreach (int num in linqMethodResult)
      Console.Write(num + " ");
  }
}

[실행 결과]

질의 구문
7 9
메서드 구문
7 9

 


예제 2. 사용자 정의 클래스

다음 예제는 사용자 정의 클래스 타입인 List에서 Where절을 사용하는 방법입니다. 나이(Age)가 25살 이상이고 급여(Salary)가 45,000원 미만인 데이터를 추출합니다.

class Person
{
  public int ID { get; set; }
  public string Name { get; set; }
  public int Age { get; set; }
  public int Salary { get; set; }    
  public override string ToString()
  {
    return "ID: " + ID + ", Name: " + Name + ", Age: " + Age + ", Salary: " + Salary;
  }
}

class Program
{
  static void Main(string[] args)
  {
    List<Person> person = new List<Person>
    {
      new Person() { ID = 100, Name = "Bob",     Age = 20, Salary = 30000  },
      new Person() { ID = 200, Name = "Tim",     Age = 25, Salary = 40000 },
      new Person() { ID = 300, Name = "Charles", Age = 30, Salary = 50000 }
    };

    // 1. 질의 구문(Query Syntax)
    List<Person> linqQueryResult = (from   obj in person
                                    where  obj.Age >= 25 && obj.Salary < 45000
                                    select obj).ToList();

    // 2. 메서드 구문(Method Syntax)
    List<Person> linqMethodResult = 
        person.Where(obj => obj.Age >= 25 && obj.Salary < 45000).ToList();

    Console.WriteLine("질의 구문");
    foreach (Person obj in linqQueryResult)
      Console.Write(obj.ToString());

    Console.WriteLine("\n메서드 구문");
    foreach (Person obj in linqMethodResult)
      Console.Write(obj.ToString());
  }
}

[실행 결과]

질의 구문
ID: 200, Name: Tim, Age: 25, Salary: 40000
메서드 구문
ID: 200, Name: Tim, Age: 25, Salary: 40000

 

출처 : https://developer-talk.tistory.com/565

'개발언어 > C#' 카테고리의 다른 글

[C#] ?연산자, ??연산자  (0) 2023.06.12
[C#] 링크(LINQ)란?  (0) 2023.05.22
[C#] Nullable type, int? 널러블 타입  (0) 2023.05.22
[C#] Nullable<T> 타입  (0) 2023.05.22
[C#] Parse(string s)와 TryParse(string s, out int result) 함수  (0) 2023.05.22