走進Linq-Linq to SQL How do I(2)
[1] 走進Linq-Linq to SQL How do I(2)
[2] 走進Linq-Linq to SQL How do I(2)
[3] 走進Linq-Linq to SQL How do I(2)
[4] 走進Linq-Linq to SQL How do I(2)
[2] 走進Linq-Linq to SQL How do I(2)
[3] 走進Linq-Linq to SQL How do I(2)
[4] 走進Linq-Linq to SQL How do I(2)
系列文章導航:
不能不說的C#特性-迭代器(下),yield以及流的延遲計算
走進Linq-Linq to SQL How do I(1)
走進Linq-Linq to SQL How do I(2)
走進Linq-Linq to SQL How do I(3)
走進Linq-Linq to SQL源代碼賞析 Table的獲取過程
走進Linq-Linq to SQL源代碼賞析之Provider的初始化
走進Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq
本篇是Linq to SQL How do I的第二篇,難度系數100,定位為進階級。
內容 l 對象之間的關系 |
對象之間的關系
既然是對象-關系映射,各個表之間肯定不是獨立存在的(如果都是獨立存在的,也沒有必要用關系數據庫了),那么就必然涉及到幾個表之間的聯合了。
Linq to SQL和SQL語句一樣,支持兩種方式的聯合:
1. 利用where子句,對兩個表進行查找
2. 使用join子句
我們還是用例子來說明吧,現在要對blogs和posts進行查詢,傳入一篇文章的id的時候,找出這篇文章相關信息的同時還要找出這篇文章屬于哪個博客,接著上篇的例子,我們首先得給Blog類加上映射:

首先獲取Post和Blog的Table的對象,然后施加操作:
Table<Blog> blogs = dbContext.GetTable<Blog>();
Table<Post> posts = dbContext.GetTable<Post>();
var result = from blog in blogs
from post in posts
where post.BlogId == blog.Id && post.Id == 2
select new {
BlogName = blog.Name,
PostTitle = post.Title,
PostBody = post.Body
};
foreach (var item in result)
Console.WriteLine(item.BlogName);
下面是Linq to SQL為我們生成的SQL語句,從上面可以看出來是用where做聯結的條件來進行的,這種聯結的方式是不被推薦的,存在于ANSI-82 SQL的標準中Table<Post> posts = dbContext.GetTable<Post>();
var result = from blog in blogs
from post in posts
where post.BlogId == blog.Id && post.Id == 2
select new {
BlogName = blog.Name,
PostTitle = post.Title,
PostBody = post.Body
};
foreach (var item in result)
Console.WriteLine(item.BlogName);

推薦的方式是使用join子句:
Table<Blog> blogs = dbContext.GetTable<Blog>();
Table<Post> posts = dbContext.GetTable<Post>();
var result = from blog in blogs
join post in posts on blog.Id equals post.BlogId
where post.Id == 2
select new {
BlogName = blog.Name,
PostTitle = post.Title,
PostBody = post.Body
};
foreach (var item in result)
Console.WriteLine(item.BlogName);
Table<Post> posts = dbContext.GetTable<Post>();
var result = from blog in blogs
join post in posts on blog.Id equals post.BlogId
where post.Id == 2
select new {
BlogName = blog.Name,
PostTitle = post.Title,
PostBody = post.Body
};
foreach (var item in result)
Console.WriteLine(item.BlogName);
全站熱搜