본문 바로가기
Languages/C#

C# 다양한 LINQ Query 연산자

by 반도체는 프로그래밍을 좋아해 2023. 4. 14.
728x90

LINQ에는 다양한 쿼리 연산자가 있습니다. 이 연산자들은 다음과 같이 크게 분류할 수 있습니다.

  1. 필터링 연산자
  2. 변환 연산자
  3. 연산자 결합
  4. 집계 연산자
  5. 순서 연산자

각각의 연산자들에 대해 자세히 살펴보겠습니다.

1. 필터링 연산자

  • Where: 조건을 만족하는 요소들만 필터링합니다.
  • OfType: 지정한 형식의 요소들만 필터링합니다.
  • Take: 지정한 개수만큼 요소를 가져옵니다.
  • TakeWhile: 지정한 조건을 만족하는 동안의 요소들을 가져옵니다.
  • Skip: 지정한 개수만큼 요소를 건너뜁니다.
  • SkipWhile: 지정한 조건을 만족하는 동안의 요소들을 건너뜁니다.

2. 변환 연산자

  • Select: 요소를 지정한 형식으로 변환합니다.
  • SelectMany: 여러 컬렉션의 요소들을 하나로 묶어서 변환합니다.
  • Cast: 지정한 형식으로 요소들을 변환합니다.
  • Concat: 두 컬렉션을 합쳐서 새로운 컬렉션을 만듭니다.
  • Zip: 두 컬렉션을 조합하여 요소를 새로운 형식으로 만듭니다.

3. 연산자 결합

  • Union: 두 컬렉션을 합쳐서 중복 요소를 제거합니다.
  • Intersect: 두 컬렉션에서 공통 요소를 찾습니다.
  • Except: 첫 번째 컬렉션에서 두 번째 컬렉션에 있는 요소를 제거합니다.
  • GroupBy: 지정한 기준으로 요소들을 그룹화합니다.
  • Join: 두 컬렉션에서 공통 필드를 기준으로 조인합니다.
  • GroupJoin: 지정한 필드를 기준으로 그룹화하고, 각 그룹에서 다른 컬렉션과 조인합니다.

4. 집계 연산자

  • Count: 요소의 개수를 세어줍니다.
  • Sum: 요소의 합을 계산합니다.
  • Average: 요소의 평균을 계산합니다.
  • Min: 요소의 최솟값을 찾습니다.
  • Max: 요소의 최댓값을 찾습니다.
  • Aggregate: 요소를 이용해 지정한 함수를 실행합니다

5. 순서 연산자

  • OrderBy/OrderByDescending : 데이터 소스의 요소를 오름차순(Asc) 또는 내림차순(Desc)으로 정렬합니다. OrderBy는 오름차순, OrderByDescending는 내림차순으로 정렬합니다.
  • ThenBy/ThenByDescending : OrderBy/OrderByDescending와 함께 사용되며, 동일한 값이 있는 경우에 다른 조건으로 정렬합니다. 먼저 OrderBy/OrderByDescending로 정렬하고, 그 다음 ThenBy/ThenByDescending로 추가적으로 정렬합니다.
  • Reverse : 데이터 소스의 순서를 반대로 뒤집습니다.
  • Shuffle : 데이터 소스의 요소를 무작위로 섞습니다.

728x90

간단한 예시로 몇 가지를 설명드리면 아래와 같습니다.

1. 필터링 연산자
Where: numbers라는 int형 리스트에서 5보다 큰 숫자만 필터링합니다.

List<int> numbers = new List<int> { 1, 4, 6, 8, 10 };
var result = numbers.Where(n => n > 5);

Take: numbers라는 int형 리스트에서 처음 3개의 요소만 가져옵니다.

List<int> numbers = new List<int> { 1, 4, 6, 8, 10 };
var result = numbers.Take(3);

2. 변환 연산자
Select: names라는 string형 배열에서 모든 요소를 대문자로 바꿉니다.

string[] names = { "John", "Mary", "David", "Mark" };
var result = names.Select(n => n.ToUpper());

 

SelectMany: numbers1과 numbers2라는 두 개의 int형 리스트를 하나의 리스트로 합쳐서 반환합니다.

List<int> numbers1 = new List<int> { 1, 2, 3 };
List<int> numbers2 = new List<int> { 4, 5, 6 };
var result = numbers1.SelectMany(n => numbers2, (n1, n2) => n1 + n2);

3. 연산자 결합
Union: numbers1과 numbers2라는 두 개의 int형 리스트를 합쳐서 중복된 요소를 제거합니다.

List<int> numbers1 = new List<int> { 1, 2, 3 };
List<int> numbers2 = new List<int> { 2, 3, 4 };
var result = numbers1.Union(numbers2);

GroupBy: people이라는 Person 클래스 리스트에서 나이(age)를 기준으로 그룹화합니다.

List<Person> people = new List<Person> 
{
    new Person { Name = "John", Age = 25 },
    new Person { Name = "Mary", Age = 30 },
    new Person { Name = "David", Age = 25 },
    new Person { Name = "Mark", Age = 35 },
    new Person { Name = "Sarah", Age = 30 }
};

var result = people.GroupBy(p => p.Age);

4. 집계 연산자
Count: numbers라는 int형 리스트의 요소의 개수를 세어줍니다.

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = numbers.Count();

Sum: numbers라는 int형 리스트의 모든 요소의 합을 계산합니다.

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = numbers.Sum();

5. 순서 연산자
OrderBy: people이라는 Person 클래스 리스트를 나이(age)를 기준으로 오름차순으로 정렬합니다.

List<Person> people = new List<Person> 
{
    new Person { Name = "John", Age = 25 },
    new Person { Name = "
728x90

'Languages > C#' 카테고리의 다른 글

C# WPF Path 그리기(3)  (0) 2023.04.18
Day 13: LINQ 소개 및 사용  (0) 2023.04.18
C# LINQ( Language-Integrated Query )  (0) 2023.04.14
Day 12: Entity Framework 소개 및 구현  (0) 2023.04.14
C# WPF Path 그리기(2)  (0) 2023.04.12