从C# 3.0说以人为本(二)—— LINQ语法结构(转)

时间:2021-12-02 20:26:25
从C# 3.0说以人为本(二)—— LINQ语法结构

www.diybl.com 时间:2009-03-09 作者:匿名 编辑:sky 点击: 76 [评论]

转自http://www.diybl.com/course/4_webprogram/asp.net/netjs/20090309/160296.html

接着上一次的程序我们继续分析探讨,LINQ语句如下:

  1. var numQuery =
  2.     from num in numbers
  3.     where (num % 2) == 0
  4.     select num;

小凡第一次看到这个语句时,第一个念头是:为什么select要放在最后?事实上,写惯了SQL,大家都觉得SELECT放在前面才是最舒服的。

问题是:为什么SELECT一定要放在前面?因为SQL放在前面吗?SELECT放在前面一定方便吗?

让我们回忆一下写SQL语句时的尴尬,我想大多数人都是和小凡这样的。

我们设想下面一种写SQL的情况,有5张表要做互相连接,并且5张表每个表中要取3个字段,那我们的FROM肯定是洋洋洒洒的:FROM TABLE_A A,TABLE_B B,TABLE_C C,TABLE_D D,TABLE_E E。

可是,又有多少人一开始就能决定5张表要用什么别名呢?以上的情况还是内连接,万一是外连接呢?挂了,FROM就更长了,LEFT OUTTER JOIN……ON……LEFT OUTTER JOIN……ON……,为了方便,SQL的SELECT就变成了SELECT *,等写完了FROM语句,回头再按照别名把*改成“别名.字段”。

这和一开始不写SELECT *,放到最后写有什么区别?!而且我们还要小心翼翼的把*替换成字段,还要注意空格,因为后面已经写好了FROM,上帝啊,这么麻烦的SQL写法,实在是痛苦不堪!

好吧,我们没得选择,因为所有的数据库SELECT语句都是这样的,第一个是这样,后面的也要变成这样!这才是灾难的起源,痛苦的根源!不这样写SQL语句根本不能执行!

但是LINQ是不需要按照这样的约定的,因为它和SQL实在是两码事。吸取了SQL的精华,去掉了SQL的糟粕,微软的C#设计师终于把情况扭转了过来,写完FROM再写SELECT,你想要用的信息前面都已经写好了,我们要做的,就是另起一行,按照前面写的别名一个个写需要SELECT的字段。

有的时候,不是大家用的最多的就是最好的,好好想想,在合适的情况下扔掉那些看起来是“铁律”的规律,让真正的以人为本精神充斥你的大脑,让大家觉得熟悉好用,又改掉那些不实用的细节,这才是方便的工具。