본문 바로가기
프로그래밍/C# LINQ

C# 표준 질의 연산자(Standard Query Operators)

by bantomak 2024. 2. 26.

표준 질의 연산자(Standard Query Operators)

Enumerable 클래스는 System.Linq 네임스페이스에 속해 있으며 50개가 넘는 질의 연산자를 포함하는데, 이들을 표준 질의 연산자라고 한다. 이 연산자들은 몇 가지 기능별로 나눠볼 수 있다.

 

Linq는 다양한 형식의 컬렉션에 질의할 수 있는 간편하고 일관된 방법이다. 지연된 실행의 개념을 구현하므로 질의는 생성 시점이 아니라 열거 과정에 실행된다.

 

 

C# 지연 평가(lazy evaluation)에 대해서

지연 평가란 무엇인가? 컬렉션의 단일 요소가 미리 계산되지 않고 호출되는 시점에서 평가가 이루어지고 실행된다. 아래의 예제 코드를 확인해 보자. 즉시 평가(eager evaluation) 즉시 평가를 사용

jettstream.tistory.com

 

대부분의 질의 연산자가 지연 실행을 지원하지만 다음과 같은 예외적인 연산자들도 존재한다.

 

  • Count와 First처럼 스칼라 값 혹은 요소를 한 개만 반환하는 연산자
  • 질의 결과를 변환하는 변환 연산자(ToList, ToArray, ToDictionary, ToLookup)

즉, Select 메서드(IEnumerable<T> - Select - IEnumerable<Y>)처럼 시퀀스를 반환하는 메서드들은 지연 실행을 구현하며, 단일 개체를 반환하는 First와 같은 메서드(IEnumerable<X> - First - Y)는 지연 실행을 구현하지 않는다.

 

LINQ(Language Integrated Natural Query)에는 질의 구문과 메서드 구문, 두 가지 형태의 구문이 있다.

둘 다 사용이 가능하며 질의 구문으로 작성하면 컴파일러가 메서드 구문으로 변환해주는 식이다.

 

질의 구문(Query Syntax)

static void Main(string[] args)
{
    string[] s = { "ironman", "captin america", "thor", "hulk" };

    var e = from a in s
            where a.Contains('n')
            orderby a.Length
            select a.ToUpper();

    foreach (var i in e)
    {
        Console.WriteLine(i);
    }
}

 

메서드 구문(Method Syntax)

static void Main(string[] args)
{
    string[] s = { "ironman", "captin america", "thor", "hulk" };

    var e = s.Where(x => x.Contains('n'))
             .OrderBy(x => x.Length)
             .Select(x => x.ToUpper());

    foreach (var i in e)
    {
        Console.WriteLine(i);
    }
}

 

필터링(Filtering)

필터링(filtering)이란 조건을 만족하는 것만 추출하기 위해 데이터 요소를 평가하는 작업이다.

투영(Projection)

  • Select
  • SelectMany

조인(Joining)

  • Join
  • GroupJoin

정렬(Ordering)

  • OrderBy
  • ThenBy

그룹화(Grouping)

  • GroupBy

집합 연산

  • Concat
  • Union
  • Intersect
  • Except

변환 메서드(Conversion Method)

  • OfType
  • Cast
  • ToArray
  • ToList
  • ToDictionary
  • ToLookup

요소 연산

  • First
  • FirstOrDefault
  • Last
  • Single
  • SingleOrDefault
  • ElementAt
  • DefaultIfEmpty

 

함께 읽으면 좋은 글

 

Effective C# Item 36 : 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라

쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라 LINQ는 쿼리 언어와 그 쿼리 언어를 일련의 메서드 집합으로 변환하는 2개의 핵심 구조를 기반으로 한다. C# 컴파일러는 쿼리 언어

jettstream.tistory.com

'프로그래밍 > C# LINQ' 카테고리의 다른 글

C# LINQ - Enumerable.TakeWhile  (0) 2024.03.28
C# LINQ - Enumerable.Zip()  (0) 2024.03.05
C# Linq - Enumerable.Take()  (0) 2024.02.26
C# Linq - Enumerable.Reverse()  (0) 2024.02.19
C# Linq - Enumerable.OfType()  (1) 2024.02.16

댓글