[C#] LINQ

Updated:

  • C# 언어에 직접 쿼리 기능을 통합하는 방식을 기반으로 하는 기술 집합
  • 데이터 원본의 각 유형에 대해 다른 쿼리를 배우는 대신, LINQ를 사용하여 기능 통합
  • LINQ to Obejct, SQL, XML 에 대해 일관성있는 쿼리 환경 제공
  • SQL Server DB, XML Doc, ADO.NET Data set, IENumarable of IENumarable 를 지원하는 모든 개체 컬렉션에 대해 LINQ 쿼리 작성 가능

Ex) source code

class IntroToLINQ
{        
    static void Main()
    {
        // The Three Parts of a LINQ Query:
        // 1. Data source.
        int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

        // 2. Query creation.
        // numQuery is an IEnumerable<int>
        var numQuery =
            from num in numbers
            where (num % 2) == 0
            select num;

        // 3. Query execution.
        foreach (int num in numQuery)
        {
            Console.Write("{0,1} ", num);
        }
    }
}

모든 LINQ 쿼리 작업은 세 가지 고유한 작업으로 구성

  1. 데이터 소스 가져오기
  2. 쿼리 만들기
  3. 쿼리 실행

LINQ Operation

Data Source

  • 쿼리 가능 형식은 특별하게 처리할 필요 없음
  • 아닐 경우, LINQ 공급자가 그렇게 나타내야함
  • LINQ 데이터 소스는 Generic IEnumerable 인터페이스 또는 이 인터페이스에서 상속된 인터페이스를 지원하는 모든 개체
  • ArrayList도 가능

Query

  • 데이터 소스 또는 소스에서 검색할 정보 지정
  • 쿼리 변수에 저장되고 쿼리 식으로 초기화
  • from, where, select 세 가지 절 포함 (SQL 순서와 반대)
  • from : 데이터 소스 지정
  • where : 필터 적용
  • select : 반환되는 요소의 형식 지정
  • LINQ에 쿼리 변수 자체는 아무작업도 수행하지 않고 데이터를 반환하지 않음
  • 나중에 쿼리가 실행될 때 결과를 생성하는 데 필요한 정보 저장 (위의 예제에서는 foreach 동작 시 저장)

Query Execution

  • 지연된 실행 : 쿼리 변수는 쿼리 명령을 저장할 뿐, 실행은 결과를 생성해야할 때 동작
  • 즉시 실행 강제 적용 : Count, Max, Average, First 등

ref :
LINQ (MS Doc)

Categories:

Updated:

Leave a comment