티스토리 뷰
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#' 카테고리의 다른 글
람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [1] (1) | 2007.09.08 |
---|---|
LINQ 의 OUTER JOIN 작업 (0) | 2007.09.04 |
XDocument 클래스와 LINQ (0) | 2007.08.30 |
확장 메서드( Extension Method ) (0) | 2007.08.29 |
SoundPlayer 클래스로 WAVE 파일 재생 (0) | 2007.08.12 |
- TAG
- c#, C# 3.0, LINQ, linq to sql
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- 2,841,738
- Today
- 3
- Yesterday
- 47
링크
- ***** 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
- MEF
- 땡초
- 비주얼 스튜디오
- Silverlight
- .NET Framework 4.0
- 엄준일
- TFS 2010
- Team Foundation Server
- Windows 8
- 팀 파운데이션 서버
- test
- mono
- 비주얼 스튜디오 2010
- Managed Extensibility Framework
- POWERUMC
- ALM
- .NET
- TFS
- github
- Team Foundation Server 2010
- monodevelop
- umc
- ASP.NET
- LINQ
- Visual Studio 2010
- Visual Studio
- testing
- c#
- Visual Studio 11
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
글 보관함
- 2020/05 (1)
- 2019/10 (3)
- 2018/11 (1)
- 2018/08 (2)
- 2017/04 (1)
- 2017/01 (2)
- 2016/11 (2)
- 2016/08 (1)
- 2016/05 (1)
- 2016/04 (2)
- 2016/02 (2)
- 2016/01 (1)
- 2015/05 (1)
- 2015/04 (2)
- 2015/03 (1)
- 2015/02 (1)
- 2015/01 (1)
- 2014/11 (1)
- 2014/09 (2)
- 2014/08 (2)
- 2014/05 (2)
- 2014/04 (3)
- 2014/03 (2)
- 2014/02 (2)
- 2014/01 (4)
- 2013/12 (2)
- 2013/11 (1)
- 2013/10 (2)
- 2013/09 (6)
- 2013/08 (3)