走进Linq-Linq to SQL感性认识篇
系列文章导航:
不能不说的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
(看到这里你也许会命名什么叫入侵式了吧,入侵式就是为了达到目的,对代码做了一些改变,比如这里的Table,Column)
User类上面加的Table表示这个类和一个表映射,表名为Users,注意,如果表名和类名是一样的,这个Name属性是无需指定的,在属性或共有字段上加Column表示这个属性和数据库表里的字段映射,如果属性名和数据库表字段名一直只需要加个Column就够了,如果这个属性在数据库表里是个主键,那么将其IsPrimaryKey设置为true就可以了。
映射建好了,该是Linq上场的时候了(我们要从数据库表里查询出用户名以”yu”开头的所有用户):
DataContext dbContext = new DataContext(connectionString);
dbContext.Log = Console.Out;
//调用DataContext的GetTable方法,获取一个Table对象
Table<User> users = dbContext.GetTable<User>();
//由于Table继承自IEnumerable,所以,前面所介绍的那些查询表达式在这里也使用了
var result = from user in users
where user.UserName.StartsWith("yu")
select user;
//遍历结果集
foreach (var u in result)
Console.WriteLine(u.UserName);
很妙吧,没有了以前重复又重复的DbCommand,DbConnection代码,好像C#直接面向数据库一样。
在上面的代码里还有一行特殊的代码:dbContext.Log = Console.Out;,它会将你的C#查询表达式最后产生的SQL语句输出来,这样就更方便你调试和优化了。
后记
本篇只是对Linq to SQL做一个大致的介绍,使大家对Linq to SQL有个全面的感性认识,在下一节会用大量的实例介绍Linq to SQL的方方面面。
从这一篇起我会由浅入深的介绍Linq to SQL,如果你已经对Linq to SQL有使用经验可以轻轻点击以下你的浏览器右上角的叉叉。或者你觉得我说的有地方有错误,有误导大家的嫌疑,烦请不要吝啬你的memory和CPU给我写个评语,我将不胜感激。