C# loves LINQ
Download
Report
Transcript C# loves LINQ
Part 1: LINQ 이해하기
Part 2: Lambda 표현 식과 확장 메서드
Part 3: LINQ 확장 메서드 활용
Conclusion
이 장에서는 LINQ의 기본 기능
을 살펴봅니다.
Language Integrated Query의 줄임말
.NET Framework 3.5 부터 공식적으로 지원
C# 3.0, Visual Basic .NET 9.0과 호환
Third party IDE의 경우 RemObjects Pascal
v2.0 (Joyride) 이후 버전부터 호환
After LINQ (SQL)
Before LINQ (SQL)
SQL
LINQ
문법
문법
SQL 표준 문법을 기초로 T-SQL,
PL/SQL 등의 확장이 존재
프로그래밍 언어별 (C#, VB.NET,
Delphi Prism 등)로 확장 지원
기능성
기능성
CREATE, READ, UPDATE, DELETE
READ (Provider에 따라 Delta
Create/Update/Delete를 지원)
실행 영역
실행 영역
응용프로그램과는 분리된 계층에서
실행
컴파일러가 해석을 하고 대응되는
코드를 MSIL로 작성
확장 가능성
확장 가능성
DBMS 조회 이외의 기능으로는 확
장에 제한이 있음
Custom LINQ Provider 작성으로
DBMS 外의 데이터 소스로 확장 가능
Pro*C
LINQ
프로그래밍 언어
프로그래밍 언어
C/C++ 문법을 전제로 사용
LINQ를 지원하는 모든 언어 (C#,
VB.NET, Delphi Prism, …)
처리 방식
처리 방식
Pro*C 전 처리기 처리 후 최종 소스
를 작성 (LEX/YACC와 같은 방식)
정규 문법의 일부로 통일되어
ASP.NET, CODEDOM에서도 지원됨
대상 데이터 소스
대상 데이터 소스
Oracle DBMS만을 고려하고 최적
화한 것이 특징
DBMS 외의 다양한 데이터 소스를
선택하거나 추가 개발 가능
기능성
기능성
CREATE, READ, UPDATE, DELETE
READ (Provider에 따라 Delta
Create/Update/Delete를 지원)
LINQ to Object
LINQ to SQL
LINQ to ADO.NET
Data Entities
LINQ to Data Set
LINQ to XML
And Your Exclusive
LINQ Providers
FROM Clause:
FROM [A] IN [B]
LET Clause:
LET [C] = [D]
WHERE Clause:
WHERE [E]
ORDERBY Clause:
ORDERBY [F] [G]
SELECT Clause:
SELECT [H]
Step 1
Step 2
Step 3
Step 4
• 사원 정보를 포함하는 컬렉션 작성
• 기본 구문으로 자료를 선택하여 결과를 출력하기
• 이름을 오름차순으로 정렬하여 결과를 출력 하기
• 성이 “김”씨인 사람들의 급여를 내림차순으로 정렬하여 결과를 출력하기
이 장에서는 Lambda
Expression과 Extension
Method에 대하여 살펴보기로
합니다.
Format #1 (식 람다):
매개 변수 => 스칼라 식;
Format #2 (문 람다):
매개 변수 => { 변수 명 = 대입 식; … };
Comparison<T> 대리자:
var x = (x, y) => x.CompareTo(y);
Action<T> 대리자:
var y = y => Console.WriteLine((y * y).ToString());
Func<T1, T2, Tresult> 대리자:
var z = (x, y) => { int z = (x + y) * (x – y); MyFunc(z); };
직접 형식 지정 가능 #1:
var = (string x, string y) => x.CompareTo(
y);
직접 형식 지정 가능 #2:
var y = (int y) => y / y;
기존의 정적 메서
드의 특성
정적 메서드가 작
용할 대상 형식의
설정
외관과는 달리 실
제 형식에 속하는
멤버가 아님
정적 메서드로서
의 성격을 그대로
유지
NULL 참조에 대한 멤
버 메서드의 호출이
제한됨
정적 메서드이기 때
문에 NULL 참조에 대
해서도 호출이 가능
Extension Method의 선언과 참조는 별도로
구분된다.
Extension Method가 정의된 Static Class가
속한 네임스페이스를 코드 상에서 참조
using System.Linq;
public static class MyExtensions
{
public static string AsString(this int i)
{
return i.ToString();
}
}
// static 키워드와 this 키워드에 주목!
Extension Method는 정적 클래스 위에서만
선언이 가능하다.
Extension Method는 정적 메서드 형태여야
만 한다.
첫 번째 인자에 확장할 대상 형식에 해당되는
변수를 지정하고 this 키워드를 붙인다.
이 장에서는 Enumerable Type
에 대하여 구현된 Extension
Method의 활용법을 살펴봅니
다.
IEnumerable
GetEnumerator
For Each
@LINQ?
All
Any
Contains
SequenceEqual
Count
Max
Sum
Min
Average
Aggregate
ElementAt
Last
Single
First
Distinct
Except
Intersect
Skip
Take
Where
Cast
Concat
DefaultIfEmpty
Select
SelectMany
GroupBy
GroupJoin
Join
Reverse
OrderBy
ToArray
ToDictionary
ToList
ToLookup
간단한 웹 기반 메모 패드 예제
사용하는 데이터베이스: Oracle 10g Express
Edition
사용하는 프레임워크: ASP.NET MVC
J-Query를 이용한 클라이언트 UI
Chapter 1에서는 LINQ의 기본 사양과 관련
된 C# 3.0의 기본 문법을 다루었습니다.
Chapter 2에서는 LINQ to SQL, LINQ to
XML에 대해서 살펴보기로 합니다.
감사합니다.