2022. 1. 31. 00:00ㆍCSharp/Advance
소개
쿼리 는 데이터 소스에서 데이터를 검색하는 식이다. 쿼리는 일반적으로 특수화된 쿼리 언어로 표현된다.
LINQ 는 다양한 데이터 소스 및 형식 (XML, SQL, ADO.NET dataset, Collection 및 LINQ provider 를 지원하는 모든 형식) 에서 일관된 모델을 제공하여 데이터를 쿼리하고 변환하는 데 동일한 기본 코딩 패턴을 사용하는 Query 이다.
쿼리 작업의 단계
: LINQ query 작업은 다음위 세가지 단계를 따른다.
- 데이터소스 가져오기
- 쿼리 만들기
- 쿼리 실행
// The Three Parts of a LINQ Query:
// 1. 데이터 소스 가져오기.
int[] numbers = new int[7] { 3, 0, 4, 5, 1, 6, 2 };
// 2. 쿼리 만들기.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num;
// 3. 쿼리 실행.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
데이터 소스
LINQ Query 를 사용하기 위한 원본 데이터
이전 데이터 소스는 배열 (array) 이기 때문에 제네릭 IEnumerable<T> 인터페이스를 암시적으로 지원한다.
그러므로 LINQ 로 쿼리 할 수 있다.
IEnumerable<T> 또는 제네릭 IQueryable<T> 같은 파생된 인터페이스를 지원하는 형식을 쿼리 가능 형식 이라고 한다.
쿼리
쿼리는 데이터 소스 또는 소스에서 검색할 정보를 지정
쿼리식은 크게 from 절 where 절 select 절로 이루어진다.
from 데이터소스
where 조건
select 데이터 선택
쿼리 실행
1. 지연된 실행
: 쿼리 변수 자체는 쿼리 명령을 저장할 뿐 foreach 문에서 쿼리 변수가 반복될 때까지 지연
// Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
2. 즉시 실행
집계 함수
: 집계 함수를 수행하는 쿼리 (Count, Max, Average 및 First)
var evenNumQuery =
from num in numbers
where (num % 2) == 0
select num;
int evenNumCount = evenNumQuery.Count();
강제 적용
: ToList 또는 ToArray 를 호출 하여 강제로 즉시 실행
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();
쿼리 구문 및 메서드 구문
사용자는 Query 구문 대신에 일반 method 구문을 사용하여 직접 호출 가능 하다.
//Query syntax:
IEnumerable<int> querySyntax =
from num in numbers
where num % 2 == 0
orderby num
select num;
//Method syntax:
IEnumerable<int> methodSyntax = numbers.Where(num => num % 2 == 0).OrderBy(n => n);
foreach (int i in querySyntax)
{
Console.Write(i + " ");
}
Console.WriteLine();
foreach (int i in methodSyntax)
{
Console.Write(i + " ");
}
Console.WriteLine();
/*
Output:
0 2 4 6
0 2 4 6
*/
확장메서드를 통해 IEnumerable<T> 에서 LINQ 관련 메서드 구문을 사용할 수 있게 해 놓았다.
관련영상
'CSharp > Advance' 카테고리의 다른 글
LINQ Projection 연산자 (Select) (0) | 2022.02.02 |
---|---|
LINQ 제한 연산자 (Where) (0) | 2022.02.01 |
제네릭 리플렉션 (Generic Reflection) (0) | 2022.01.28 |
제네릭 대리자 (Generic Delegate) (0) | 2022.01.27 |
제네릭 메서드 (Generic Method) (0) | 2022.01.26 |