走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq
[1] 走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq
[2] 走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq
[3] 走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq
[2] 走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq
[3] 走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq
系列文章导航:
不能不说的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,语言集成查询,就是把一些查询操作集成到语言中(貌似是废话),比如查询关系数据库,而且提供一种一致的操作方式,不管最终的数据存储在哪里?内存中,远程数据库还是一Xml格式文件存储,不仅仅如此,你还可以用你丰富的想象力扩充自己的查询。Linq to SQL无疑把Linq的能量发挥的淋漓尽致,我们就以Linq to SQL的体系结构来学习一下Linq的整体框架。
在上两章里面我们通过源代码探讨了关于DataContext的初始化和Table<TEntity>对象的获取,以及Provider的初始化。今天我们来看看Linq to SQL执行的大至流程
假如我们写下这样的代码:
DataContext dbCtx = new DataContext("server=localhost;database=cnblogs;user id=sa;pwd=sa");
Table<Post> posts = dbCtx.GetTable<Post>();
foreach (Post p in posts)
{
Console.WriteLine(p.Title);
}
Table<Post> posts = dbCtx.GetTable<Post>();
foreach (Post p in posts)
{
Console.WriteLine(p.Title);
}
在幕后到底发生了什么呢?
看到foreach代码大家肯定都知道这个Table<Post>肯定实现了IEnumerable<Post>接口,这里的foreach的代码和下面这个代码的效果是一样的,实际上最终也是转换成这样的代码:
IEnumerator<Post> iterator = posts.GetEnumerator();
while (iterator.MoveNext())
{
Post p = iterator.Current;
Console.WriteLine(p.Title);
}
while (iterator.MoveNext())
{
Post p = iterator.Current;
Console.WriteLine(p.Title);
}