티스토리 뷰
LINQ 의 JOIN
기존 C# 2.0 의 Typed DataSet 의 개념과 LINQ 가 결합하여 LINQ to SQL Classes 라는
이름으로 굉장히 강력한 기능을 제공한다.
LINQ, 람다식, 익명 형식에 대한 내용은 다음의 URL 을 참고 하세요.
2009-06-20 아래의 경로로 접속할 수 없습니다.
LINQ to SQL Classes 항목 만들기
[새 항목 만들기] 에서 LINQ to SQL Classes 를 만든다.
그럼 .dbml 확장자를 가진 몇가지 파일과 디자이너 화면이 나타나게 된다.
여기서 사용하게 될 데이터베이스는 UmcBlog 소스와 함께 공개된 데이터베이스를 사용할 것이다.
Article 테이블은 블로그의 아티클을 저장할 테이블이다.
Comment 테이블은 아티클에 대한 댓글을 저장하는 테이블이다.
디자이너는 두 테이블간 관계가 맺어져 있다면, 이 두 테이블 간의 RULE 과 Key 등이
자동으로 매핑되는 것을 볼 수 있다.
DataBase 쿼리와 LINQ 를 이용한 JOIN 작업
SELECT A.ArticleNo, C.Content, C.InsertDate
FROM Article A
INNER JOIN Comment C ON A.ArticleNo=C.ArticleNo |
Article, Comment 테이블의 JOIN 쿼리 |
간단하게 JOIN 하는 쿼리를 작성해 보았다.
결과는 다음과 같을 것이다.
Comment 테이블의 댓글의 ArticleNo 를 Article 테이블과 조인하여 나온 결과이다.
그렇다면 LINQ 를 이용한 JOIN 작업을 보자.
위에서 LINQ to SQL Classes 를 다음과 같이 객체를 생성한다.
UmcBlogDataContext db = new UmcBlogDataContext(); |
|
SQL 쿼리와 비교해 볼 때 다소 복잡해 보이는 감이 없지 않다.
C# 2.0 의 익명 메서드를 이용와 비교해볼 때 위와 같이 람다식 을 이용하여 그나마 짧게
물론 위와 같이 불편하게 쿼리를 작성하지 않아도 된다.
LINQ 의 쿼리식을 이용하여 마치 SQL 쿼리를 작성하듯 쿼리를 완성할 수 있다.
LINQ 식을 이용한 JOIN
var joinList = from a in db.Articles
from c in db.Comments
where a.ArticleNo == c.ArticleNo
orderby c.InsertDate descending
select new {
ArticleNo = a.ArticleNo,
CommentContent = c.Content,
InsertDate = c.InsertDate }; |
위의 예제를 보면 from 절이 두개가 오는 것을 알 수 있다.
마치 PL/SQL 의 from Article A, Comment C 와 같이 사용하듯 하다.
물론 ANSI SQL 과 같은 방법으로 JOIN 이 가능하다.
그럼 아래의 구문을 보자.
|
위와 같이 join 문과 함께 on 뒤에 두개의 테이블을 조인을 하게 된다.
On 과 함께 ==(Equals) 을 사용할 수 없기 때문에 “equals” 을 통해 두 테이블을 조인하게 된다.
위의 예제를 보듯, 객체를 이용한 쿼리와 SQL 쿼리식과 같은 쿼리가 모두 가능하다는 것을
알 수 있다.
하지만, outer join 은 기존 방법과는 약간 다른 방법으로 조인을 하게된다.
다음시간에 LINQ 의 outer join 을 알아보도록 하자.
'.NET > C#' 카테고리의 다른 글
Custom LINQ Provider - [4]. Query(쿼리)를 이용한 원격 개체 탐색 (0) | 2008.03.27 |
---|---|
Custom LINQ Provider - [3]. Custom LINQ Provider 만들기 (IQueryProvider) (0) | 2008.03.17 |
Custom LINQ Provider - [2]. Custom LINQ Provider 만들기 (IQueryable) (0) | 2008.03.13 |
Custom LINQ Provider - [1]. 소개 (1) | 2008.03.10 |
LINQ 의 OUTER JOIN 작업 (0) | 2007.09.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
TAG
- Visual Studio 2008
- ALM
- mono
- 팀 파운데이션 서버
- Silverlight
- monodevelop
- Windows 8
- testing
- TFS 2010
- 엄준일
- LINQ
- .NET
- Visual Studio 11
- 비주얼 스튜디오 2010
- Visual Studio
- TFS
- test
- Team Foundation Server 2010
- .NET Framework 4.0
- umc
- POWERUMC
- c#
- Team Foundation Server
- 비주얼 스튜디오
- Visual Studio 2010
- ASP.NET
- github
- MEF
- 땡초
- Managed Extensibility Framework