공부/C#

LINQ 연산자

월러비 2025. 9. 9. 18:43

C# LINQ 연산자 소개

LINQ 연산자 개요

연산자 분류

  • LINQ 연산자는 세 가지 범주로 분류됨.
    • 시퀀스 입력, 시퀀스 출력 (sequence→sequence)
    • 시퀀스 입력, 단일 요소 또는 스칼라 값 출력
    • 입력 없음, 시퀀스 출력 (생성 메서드)

시퀀스→시퀀스 연산자

  • 데이터 구조
    • 관계형 (Relational):
      • 테이블과 테이블 간 관계로 표현.
      • SQL 데이터베이스에서 흔히 사용.
      • 데이터 분산 저장 및 조인 연산으로 연결.
    • 계층적 (Hierarchical):
      • 트리 구조로 표현.
      • 부모-자식 관계.
      • XML, JSON 등에서 자주 사용.
    • 플랫 (Flat):
      • 모든 데이터가 하나의 컬렉션에 포함.
      • 중첩 구조 없음.
      • 배열, 리스트 형태로 표현.
  • 변환 방법
    • 관계형 → 플랫:
      • SelectMany: 여러 컬렉션을 하나로 평탄화. (예: 고객 목록 + 각 고객의 주문 목록 → 모든 주문 목록)
      • Join: 공통 속성을 기준으로 두 개 이상 컬렉션 연결. (예: 고객 테이블 ⋈ 주문 테이블 → 고객 정보 + 주문 정보)
    • 관계형 → 계층적:
      • 서브쿼리 (Select-subquery): 다른 쿼리 내부에 포함된 쿼리 사용. (예: 각 고객에 대한 주문 목록을 서브쿼리로 가져옴)
      • GroupJoin: 두 컬렉션 연결 후 오른쪽 컬렉션 요소들을 왼쪽 컬렉션 요소에 그룹화. (예: 고객 테이블 ▷◁ 주문 테이블 → 각 고객에 대한 주문 목록 그룹)
    • 계층적 → 플랫:
      • SelectMany: 계층 구조를 평탄화.
      • Group: 특정 속성 기준으로 요소 그룹화 후 각 그룹 요소들을 하나의 컬렉션으로 가져옴.
    • 플랫 → 계층적:
      • 서브쿼리 또는 Group 사용. (예: 상품 목록을 카테고리별로 그룹화)
  • 주요 LINQ 연산자
    • SelectMany: 컬렉션 평탄화.
      • 여러개의 시퀀스를 받아 하나의 시퀀스로 반환하는 연산자다.
    • Join: 컬렉션 연결.
    • 서브쿼리: 쿼리 내 쿼리.
    • GroupJoin: 그룹화된 조인.
    • Group: 요소 그룹화.

기능 분류 메서드 설명

필터링 (Filtering) Where 주어진 조건에 맞는 요소만 반환함
  Take 시퀀스의 시작부터 지정된 개수의 요소만 반환함
  TakeLast 시퀀스의 끝에서부터 지정된 개수의 요소만 반환함
  TakeWhile 주어진 조건을 만족하는 동안의 요소만 반환함
  Skip 시퀀스의 시작부터 지정된 개수의 요소를 건너뜀
  SkipLast 시퀀스의 끝에서부터 지정된 개수의 요소를 건너뜀
  SkipWhile 주어진 조건을 만족하는 동안의 요소를 건너뜀
  Distinct 중복된 요소를 제거함
  DistinctBy 지정된 키 선택기를 사용하여 중복된 요소를 제거함
투영 (Projecting) Select 각 요소를 람다 함수를 사용하여 새로운 형태로 변환함
  SelectMany 중첩된 시퀀스를 하나의 평면화된 시퀀스로 변환함
조인 (Joining) Join 두 시퀀스의 요소를 지정된 조건에 따라 내부 조인함
  GroupJoin 두 시퀀스의 요소를 지정된 조건에 따라 그룹 조인함
  Zip 두 시퀀스의 동일한 인덱스에 있는 요소를 쌍으로 묶음
정렬 (Ordering) OrderBy 오름차순으로 요소를 정렬함
  OrderByDescending 내림차순으로 요소를 정렬함
  ThenBy OrderBy 또는 OrderByDescending 이후 추가 정렬 조건을 지정함 (오름차순)
  ThenByDescending OrderBy 또는 OrderByDescending 이후 추가 정렬 조건을 지정함 (내림차순)
  Reverse 시퀀스의 요소 순서를 반전함
그룹화 (Grouping) GroupBy 지정된 키 선택기를 기준으로 요소를 그룹화함
  Chunk 시퀀스를 지정된 크기의 청크(하위 시퀀스)로 분할함
집합 연산자 (Set operators) Concat 두 시퀀스를 연결함
  Union 두 시퀀스의 합집합을 반환함 (중복 제거)
  UnionBy 지정된 키 선택기를 사용하여 두 시퀀스의 합집합을 반환함 (중복 제거)
  Intersect 두 시퀀스의 교집합을 반환함
  IntersectBy 지정된 키 선택기를 사용하여 두 시퀀스의 교집합을 반환함
  Except 첫 번째 시퀀스에는 있지만 두 번째 시퀀스에는 없는 요소를 반환함 (차집합)
  ExceptBy 지정된 키 선택기를 사용하여 첫 번째 시퀀스에는 있지만 두 번째 시퀀스에는 없는 요소를 반환함 (차집합)

시퀀스→요소 또는 값 연산자

기능 분류 메서드 설명

요소 연산자 (Element operators) First 시퀀스의 첫 번째 요소를 반환함.
  FirstOrDefault 시퀀스의 첫 번째 요소를 반환하거나, 시퀀스가 비어 있는 경우 기본값을 반환함.
  Last 시퀀스의 마지막 요소를 반환함.
  LastOrDefault 시퀀스의 마지막 요소를 반환하거나, 시퀀스가 비어 있는 경우 기본값을 반환함.
  Single 시퀀스의 유일한 요소를 반환함. 시퀀스에 요소가 없거나 두 개 이상인 경우 예외를 발생시킴.
  SingleOrDefault 시퀀스의 유일한 요소를 반환하거나, 시퀀스가 비어 있는 경우 기본값을 반환함. 시퀀스에 두 개 이상의 요소가 있는 경우 예외를 발생시킴.
  ElementAt 지정된 인덱스에 있는 요소를 반환함.
  ElementAtOrDefault 지정된 인덱스에 있는 요소를 반환하거나, 인덱스가 범위를 벗어난 경우 기본값을 반환함.
집계 메서드 (Aggregation methods) Aggregate 시퀀스의 모든 요소에 누적 함수를 적용함.
  Average 시퀀스 요소의 평균값을 계산함.
  Count 시퀀스에 있는 요소의 개수를 반환함.
  LongCount 시퀀스에 있는 요소의 개수를 long 형식으로 반환함.
  Sum 시퀀스 요소의 합계를 계산함.
  Max 시퀀스 요소의 최대값을 반환함.
  Min 시퀀스 요소의 최소값을 반환함.
수량자 (Quantifiers) All 시퀀스의 모든 요소가 지정된 조건을 만족하는지 확인함.
  Any 시퀀스에 하나 이상의 요소가 지정된 조건을 만족하는지 확인함.
  Contains 시퀀스에 지정된 요소가 포함되어 있는지 확인함.
  SequenceEqual 두 시퀀스가 동일한지 확인함.

void→시퀀스 연산자

기능 분류 메서드 설명

생성 메서드 (Generation methods) Empty 요소가 없는 빈 시퀀스를 생성함.
  Range 지정된 범위 내의 정수 시퀀스를 생성함.
  Repeat 지정된 값을 지정된 횟수만큼 반복하는 시퀀스를 생성함.

요약

  • 게임 프로그래밍할때는 실시간으로 동작하는 곳에는 사용하지 말아야한다.
    • 요령껏 써라