14. Lamda
- 람다식으로 만드는 익명 메소드, Anonymous Function(무명 함수)
- 함수를 변수에 대입
14.1. 람다식 선언
매개변수_목록 => (식)
14.2. Statement Lambda
(매개변수_목록) = > {
문장1;
문장2;
문장3;
...
}
14.3. Func, Action
- delegate 대리자 선언부 생략 방법
- func 대리자, 결과를 반환하는 메소드 참조
- action 대리자, 결과를 반환하지 않는 메소드를 참조
14.4. Expression Tree
- System.Linq.Expressions
- Expression 클래스와 파생 클래스들
- 각 노드 타입 상관 없이 Expression 형식 참조 선언 가능
- expression tree = statement(구문, 구현부) 를 트리로 표현한것
14.5. Expression-Bodied Member
- 메소드, 속성(인덱서), 생성자, 종료자를 statement로만 구현
- 연산자 { }를 =>로 변경
15. LINQ
- LINQ는 컬렉션을 편리하게 다루기 위한 목적으로 만들어진 질의(Query) 언어
- LINQ는 DBMS의 SQL(Structured Query Language)을 본떠 프로그래밍 언어에 통합
- LINQ는 다른 .NET 언어에서는 사용할 수 없다. C#, VB 만 사용 가능
15.1. from, where, orderby, select
LINQ: Language INtegrated Query
from
- 범위 변수
- 쿼리 변수
- IEnumerable<T> 상속받은 배열, 컬랙션 객체
- foreach (int x in arr) x 는 변수, from x in arr 의 x 는 변수가 아니다.
where
- 조건
orderby
- 정렬
select
- 반환형: IEnumerable<T>
- eg. select profile ( = IEnumerable<Profile> )
- eg. select profile.name ( = IEnumerable<string> )
- eg. select new { Name = profile. Name, InchHeight = profile.Height * 0.393 };
15.2. 중첩
15.3. group by
반환형: IGrouping<T>
15.4. inner Join
- 두 데이터 원본에서 특정 필드를 비교해 일치하는 데이터 반환
- 기준: 첫번째 원본 데이터
- 반환시, 원본에 존재하지 않는 데이터 제외
15.5. outer join
- 반환시, 원본에 존재하지 않는 데이터 포함
- 일치하는 데이터가 존재하지 않는다면, 빈 값으로 채움
- join 절 수행 후, 임시 컬렉션에 저장하고, DefaultIfEmpty 연산을 통해 비어 있는 조인 결과에 빈 값을 채움
15.6. 비교
15.7. 내부 동작 방식
LINQ 쿼리식을 분석해서 일반적인 메소드 호출 코드로 만듦
15.8. 예제