집게사장의 꿈

C# LINQ 소개 본문

기타/C#

C# LINQ 소개

Krapboss 2024. 7. 21. 19:23
쿼리와 LINQ

 

Query : 데이터 소스에서 데이터를 검색하는 식

DB SQL, XML용 XQuery 와 같은 네이티브 쿼리가 있다.

개발자는 데이터 원본 또는 형식 종류에 따라 새로운 쿼리 언어를 학습해야 되는데,

LINQ는 데이터 원본 및 형식에 대해 일관된 C#언어 모델을 제공한다.

 

LINQ Query는 항상 C# 개체를 사용하며, 동일한 기본 코딩 패턴을 사용하여 LINQ 공급자를 사용할 수 있는 경우 데이터를 쿼리하고 반환한다.

 

 

 

쿼리의 작업 

 

1. 데이터 가져오기

2. 쿼리 생성

3. 쿼리 실행

 

 

 

 

LINQ에서 쿼리 실행은 쿼리 자체와 다릅니다. 즉, 쿼리 변수를 만들어 데이터를 검색하지 않습니다.

 

 

데이터를 참조해서 데이터를 반환한다는 뜻이라고 생각할 수 있을 것 같다.

 

 


 

데이터 소스의 참조를 위해

LINQ 데이터 원본은 제네릭 IEnumerable<T> 인터페이스를 지원하는 모든 개체이거나, 거기서 상속되는 인터페이스(일반적으로 IQueryable<T>)입니다.
제네릭이 아닌 Ienumerable을 지원하는 ArrayList와 같은 형식은 LINQ에서 사용 가능

 

 

 

 

 


 

 

LINQ 쿼리의 생성으로 데이터가 생성되는 것이 아닌 쿼리 변수를 사용할 때 결과가 생성된다.

LINQ에서 쿼리 변수 자체는 아무 작업도 수행하지 않고 데이터를 반환하지 않는다는 것입니다. 나중에 쿼리가 실행될 때 결과를 생성하는 데 필요한 정보를 저장

 

 

 


쿼리 연산자의 분류

 

 


Immediate

 

"쿼리 변수를 즉시 실행하는 것"

 

데이터 소스를 읽어 작업이 한번 수행됨을 의미

스칼라 결과값을 반환하는 표준 쿼리 연산자는 즉시 실행

Count, Max, Average,First가 있음

*쿼리 자체가 결과를 반환하기 위해서는 foreach를 사용하지만, 명시적인 foreach 문 없이 사용

 

Enumerable.ToList 또는 Enumerable.ToArray 메서드 또한 즉시 실행되지만, 결과값을 캐시 해서 쿼리 실행없이 참조 가능

var evenNumQuery =
    from num in numbers
    where (num % 2) == 0
    select num;

int evenNumCount = evenNumQuery.Count();

 

List<int> numQuery2 =
    (from num in numbers
        where (num % 2) == 0
        select num).ToList();

// or like this:
// numQuery3 is still an int[]

var numQuery3 =
    (from num in numbers
        where (num % 2) == 0
        select num).ToArray();

 

 


 


Delay

 

"쿼리 변수 선언 후 나중에 사용하는 것"

 

쿼리 선언 시점이 아닌 foreach문에서 쿼리변수가 열거될 때 작업을 수행하는 것

 

쿼리의 결과 값은 쿼리 선언이 아닌 쿼리의 실행 시점 원본 데이터에 따라 변경

///
///.....쿼리 선언 생략
///

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

 

 

 

 


LINQ 쿼리의 이점

 

  • 보다 간결하며 쉽게 읽을 수 있습니다(특히 여러 조건을 필터링하는 경우).
  • 최소한의 애플리케이션 코드로도 강력한 필터링, 순서 지정 및 그룹화 기능을 제공합니다.
  • 거의 또는 전혀 수정하지 않고도 다른 데이터 소스에 이식할 수 있습니다.

 

 

출처 자료

https://learn.microsoft.com/ko-kr/dotnet/csharp/linq/get-started/introduction-to-linq-queries

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

LINQ 집합  (0) 2024.07.23
LINQ 집계함수  (0) 2024.07.23
LINQ 메서드 GroupBy  (1) 2024.07.23
LINQ 메서드  (0) 2024.07.23
C# LINQ 쿼리 키워드  (0) 2024.07.21