兴国安邦

C# 3.0, Linq, Linq To Sql

博客园 首页 新随笔 联系 订阅 管理
  33 Posts :: 0 Stories :: 530 Comments :: 52 Trackbacks

写了十几篇关于c# 3.0和Linq To Sql的文章后,我开始回过头来,开始反思,我把读者带向了何方。是天堂?还是地狱?

高手们总是对Linq To Sql不屑一顾。谈问题喜欢从底层来。可更多的新手们徘徊在“会用”和“知道”的水平上。我就是这样。我永远都是个新手,无论在什么时候,达到了什么水平,其骨子里,永远都是个新人。

C# 3.0最大的变化莫过与推出了Linq, 其他所有的新的特性,包括Extension Method, Lambda Expression, Anonymous Types,其被引入的主要原因也是为了Linq。 当然,对于这些特性的使用,并不一定要局限于Linq。新的技术推出来了,使用它的人如何使用它,并不会受制造者的限制。

笔者从06年3月份开始,一直在从事C# 3.0的测试工作。不敢说对每个特性都知道,更不敢说对每个特性都很熟悉。只是知道某些特性而已。对于一个新手来讲,特别是那些没有用过C# 2.0的人,直接给他讲Lambda Expression,会让他眩晕的。因为,他还可能不知道Anonymous Methods. 那就更别提Extension Method了。那还有没有其他的方法?笔者做了尝试。那就是先用起来,再去慢慢理解。所以,在C# 3.0入门系列中,最开始讲的是Query Expression---查询表达式。

在ADO.NET + Sql 时代,我们用Ado.net 去构建数据访问层,对于那些与表对应的实体,需要我们自己去编写对应的类。这些方法是我们在编写与数据相关的应用程序时,常会用到的方法。因为,考虑到绝大多数人会用Linq To Sql去代替Ado.net 来去做与数据库相关的商业程序。所以,笔者抛弃了其他特性,直接从Linq 开始讲起。而这主要又是Linq To Sql.

Linq To Sql的名称的由来,是有个演化过程的。其最开始,称Dlinq。MS也只是推出了一个Linq Preview。后来,Linq从Linq Preview中集成到.NET Framework 3.5中。其名称空间也有Dlinq 改成了Linq, 那么Dlinq也相应调整名字,为Linq To Sql。在我的blog中,依然留有这个演化的痕迹。只是,笔者还没有来的及更新其内容。VS也由最初2007版本,更名为VS2008。 现在发布的是Beta2.

一个语言和一个技术的兴盛,是需要大量的人在使用它,认识到它的优点,并能推广它。笔者假设了所有的读者都是有C# 1.1语言基础的。而且着文更多的关注于Linq To Sql的应用。因为,笔者认为,这个才是Linq 的生命力所在。边学边用,边学边练,是笔者一直所倡导的学习方法。看会了,写不出来,那还是不会。那就动起手了,边学边做,真正的使用Linq To Sql做起你的项目。

笔者并不认为,非要知道Anonymous Methods,才能会用Lambda Expression。曾看过有人blog上断言,一个经验丰富的c#程序员学会用Lambda Expression,需要2年的时间。笔者依然想挑战这个预言。2个月行不行?2 个星期呢,是不是更好?要不咱2天吧,要是能2个小时最好不过了,或者只要2分钟。笔者的理论很简单,学会开拖拉机,并不一定需要知道拖拉机是怎么工作的。同样的,会使用Lambda Expression也并不一定知道Lambda Expression是如何实现的。要先用起来。 随着你工作经验的积累,再逐步去理解它,了解它,并且深入认识它。这才是一个循环渐进的过程。

而C# 3.0入门系列的文章,正是按这思路来的。或许,要是能有个具体的项目,边用Linq做着,边介绍linq或许更好。但是,有些东西是不能随便拿出来的。笔者在准备一个demo,希望它能对大家有所帮助。

ps:
C# 3.0 入门系列(一)
C# 3.0入门系列(二)
C# 3.0入门系列(三)
C# 3.0入门系列(四)-之Select操作
C#3.0入门系列(五)-之Where操作
C#3.0入门系列(六)-之OrderBy操作
C#3.0入门系列(七)--之OR工具介绍
C#3.0入门系列(八)-之GroupBy操作
C#3.0入门系列(九)-之GroupBy操作
C#3.0入门系列(十)-之Join操作
C#3.0入门系列(十一)-之In, Like操作
C#3.0入门系列(十二)-Lambda表达式中Lifting

Linq To Sql进阶系列(一)-从映射讲起
Linq To Sql进阶系列(二)M:M关系
Linq To Sql进阶系列(三)CUD和Log
Linq To Sql进阶系列(四)User Define Function篇

posted on 2007-08-15 21:26 Tom Song 阅读(5264) 评论(21)  编辑 收藏 所属分类: C# 3.0Linq To Sql

Feedback

#1楼  2007-08-15 22:26 cnodin [未注册用户]
不错不错。只有先会用了,才有基础去研究该技术的原理。
  回复  引用    

#2楼  2007-08-15 22:43 伍迷      
真是有心人呀,我对你的努力笔耕深表感谢。因为你的博客文章,我学到很多。继续加油。
  回复  引用  查看    

#3楼  2007-08-15 22:46 丁学      
其实很多东西在开始时都没有必要知道太多,“能用”就可以了,随着用的次数多了,慢慢自然就知道怎么用更好,为什么要这么用
如果非要等全学透了再用,估计这辈子就剩下学习的时间了,什么也干不成
  回复  引用  查看    

#4楼  2007-08-15 23:07 木野狐(Neil Chen)      
感谢楼主的系列文章。
  回复  引用  查看    

#5楼  2007-08-15 23:52 江南白衣      
但是,有些东西是不能随便拿出来的。
-------------------
入门性的东西还会涉及到商业秘密?
  回复  引用  查看    

#6楼  2007-08-16 00:32 rocky [未注册用户]
感谢
  回复  引用    

一个经验丰富的c#程序员学会用Lambda Expression,需要2年的时间...这句话不知道是谁说的,说这话的人是不是自认为经验很丰富?

C# 3.0主要的增强是完全引入了linq,其实这个想法从开始构思C#时就有了,但出于时间制约和某种考虑MS没有一步到位罢了,一种新的语言,尤其是一门工业化语言,MS不想让其门槛太高(据说至少有40%的使用C#的人没有CS背景,没有本科学位,某些人称其为web monkeys ...),所以就有了一开始那个我们熟悉的简单,易用又功能非常强大的C#语言,然后有了C# 2.0,C# 3.0,现在你回头看看C# 2.0,会不会觉得因每个功能都在为C# 3.0做铺垫,在为3.0服务,在笔者的某篇文章中看到说Lambda Expression是如果的强大,如果先有Lambda Expression, 就不会有Anonymous Methods了,这个说的很对,但lambda表达式又不是现在才有的东西,MS为什么要先在C# 2.0中介绍Anonymous Methods?它只是想让使用C#的人慢慢来适应这个变化罢了,Anonymous Methods和Lambda Expression有什么不一样吗?我想其区别就体现在视觉上吧?

而linq to sql,说穿了只是MS为其自身产品Sql server提供的一个linq provider罢了,当然它肯定在这方面花费的时间和精力会是最多的,质量和性能强了才能大卖自家的产品嘛,而且还暂时对第三方的provider支持的不好(不清楚是不是目前就是不支持),当然这个我们也能理解


至于说C# 3.0和Linq to sql的学习方法嘛,我觉得还是好好学学C# 3.0的每个特性,好好学学Linq吧,至于Dlinq,会用SqlMetal,亦或是更简单的linq to sql classes生成DataContext就行了,后面的用法就和linq几乎完全一样了。 毕竟对于开发人员来说,不需要也没有必要去搞清楚这个Context是怎么来的,每一项都代表什么意思,它是通过什么pipeline,怎么把Expreesion tree翻译成sql的, MS的本意就是方便你更快速的开发嘛,而且上面的这个它也不会写文档告告诉我们很细节的东西,我们只要知道所有的工作都是在DataContext中完成的就行了。 而且有它也并不是就不需要懂sql了,它生成的sql又不见得每个都是那么的理想,很多时候还是需要自己去写sproc的。

杂七杂八写了很多,错误地方很多,仅仅是个人的一些看法。
  回复  引用    

#8楼  2007-08-16 02:49 yanzimywife      
感谢LZ的系列文章让我对linq有了认识!
  回复  引用  查看    

#9楼  2007-08-16 08:07 aaa [未注册用户]
楼主能不能讲一讲expression tree呢?
很希望了解一下这个,似乎中文的资料比较少
  回复  引用    

#10楼  2007-08-16 08:31 迭戈      
非常感谢。最近都在拜读你的文章。慢慢学习。。
  回复  引用  查看    

#11楼  2007-08-16 13:38 Join miao      
支持!期待您的Demo
  回复  引用  查看    

只要会用,能够用20%的付出,获取80%回报 。
我们就应该坚定不移的这样做
  回复  引用    

#13楼 [楼主] 2007-08-16 18:08 宋国安      
@aaa
我努力吧。。后面已经开了n多个topic,只是没有时间写呀。
@vacant_mind
是的。linq并不是完美的。
  回复  引用  查看    

#14楼  2007-08-16 22:42 XP主题 [未注册用户]
这个!!!
  回复  引用    

#15楼  2007-09-27 08:24 俗人 [未注册用户]
我想取前10笔,或者前100笔,怎么做呢?谢谢~
  回复  引用    

#16楼 [楼主] 2007-09-28 11:56 宋国安      
@俗人
使用take(10)
  回复  引用  查看    

试问DLINQ是不是慢慢将取代ADO.NET,个人感觉MS要将C#发展为最强大的编程语言,这么升级好象把所有的技术想整合了,一句话跟着MS走真累
  回复  引用    

#18楼 [楼主] 2007-11-28 20:15 Tom Song      
@不想学习的人
问的好。这个问题,是这样的。Linq To Sql比ADO.NET VNext(Linq To Entity)早推出。但是,这两个其实大部分功能类似的。早晚会统一的。耐心着等着吧.
  回复  引用  查看    

#19楼  2007-12-07 15:13 thisisbody      
支持楼主说法,边学边用哈,
  回复  引用  查看    

#20楼  2008-01-10 09:35 chinese_zmm      
学习总要需序渐进,楼主我支持你。
  回复  引用  查看    

#21楼  2008-02-14 15:08 sd [未注册用户]
楼主加油
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: