走进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<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<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);