接着上一次的程序我们继续分析探讨,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的字段。

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

转载于:https://www.cnblogs.com/vanpan/archive/2009/01/07/3583053.html

从C# 3.0说以人为本(二)—— LINQ语法结构相关推荐

  1. Vue2.0学习笔记二 基础语法

    1. Mustache语法 Mustache语法也叫插值表达式,Mustache语法式通过{{}}渲染到页面,并且数据是响应式的. 数据的响应式:数据的变化导致页面的内容随之变化 效果图: 2. 指令 ...

  2. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  3. Android10.0 日志系统分析(二)-logd、logcat架构分析及日志系统初始化-[Android取经之路]

    摘要:本节主要来讲解Android10.0 日志系统的架构分析,以及logd.logcat的初始化操作 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级 ...

  4. Android 10.0 PackageManagerService(二)权限扫描-[Android取经之路]

    摘要:PackageManagerService在systemReady()后,进行了/system/etc/permissions中的各种xml进行扫描,进行相应的权限存储,供以后使用 阅读本文大约 ...

  5. [深度学习] 分布式Tensorflow 2.0 介绍(二)

    [深度学习] 分布式模式介绍(一) [深度学习] 分布式Tensorflow 2.0介绍(二) [深度学习] 分布式Pytorch 1.0介绍(三) [深度学习] 分布式Horovod介绍(四) 一 ...

  6. Zabbix 3.0 部署监控 [二]

    原文出自  http://www.abcdocker.com/abcdocker/1453 Zabbix 3.0 部署监控 [二] zabbix 一.添加监控主机及设置 1.创建主机 Agent可以干 ...

  7. WP模板Ripro9.0免扩展二开版+全解密无后门

    正文: RiPro9.0免扩展二开版,RiPro主题全解密无后门,这次分享的源码包内的东西不少 不仅含有RiPro主题.子主题,还有几款插件,都是非常实用的东西!下面我将逐一介绍一下. 1.ripro ...

  8. LXD 2.0系列之二:LXD安装和配置

    本文讲的是LXD 2.0系列之二:LXD安装和配置, [编者的话] 第三方调查报告 显示LXD有潜质成为一款受欢迎的第三方容器管理工具.本文是LXD核心维护者.加拿大程序员Stéphane Grabe ...

  9. RiPro9.0免扩展二开版,RiPro主题全解密无后门

    RiPro9.0免扩展二开版,RiPro主题全解密无后门,这次分享的源码包内的东西不少 不仅含有RiPro主题.子主题,还有几款插件,都是非常实用的东西!下面我将逐一介绍一下. 1.ripro主题:本 ...

  10. 适用于 VS 2022 .NET 6.0(版本 3.1.0)的二维码编码器和解码器 C# 类库

    适用于 VS 2022 .NET 6.0(版本 3.1.0)的二维码编码器和解码器 C# 类库 本文转载自CodeProject上的一篇博文适用于 VS 2022 .NET 6.0(版本 3.1.0) ...

最新文章

  1. 软件设计是怎样炼成的(6)——打造系统的底蕴(数据库设计)(上篇)
  2. c++清空一个txt文本_Linux练习6: 文本查看cat, head, less
  3. 移除集合效率高还是add高_List、set集合接口分析
  4. 注入点批量收集工具_原来微信群也是能够批量管理的,学到了
  5. 一年级学情分析计算机,小学一年级语文学情分析范文
  6. python调整图像大小_使用Python调整图像大小
  7. 用条件变量实现事件等待器的正确与错误做法
  8. Leetcode 946.验证栈序列
  9. 机器学习(11): FP-growth算法 小结及实验
  10. 关于selenium配置Chrome驱动(Windows系统)
  11. java 解析 键值_JAVA:解析单个字符串键值对
  12. 视频伪原创工具 剪辑过的视频md5会改变吗
  13. 中兴路由器,交换机DHCP原理,dhcp配置,实例
  14. 我看现在的seo培训机构
  15. 微信看一看小程序视频缓存到手机的位置
  16. matlab错误的代码,matlab代码纠正错误
  17. 【RTT】SPI Flash 与文件系统(3):DFS 和 EasyFlash
  18. []575. Distribute Candies
  19. ajax 不能打印出来数据,console打印数据,发现打印结果并非初始ajax返回的值
  20. 2017服务器虚拟化市场占有率,2017年中国VR行业消费者规模及发展趋势预测分析【图】...

热门文章

  1. AIM Tech Round 5 (rated, Div. 1 + Div. 2)
  2. vue2.0配置 https://github.com/wike933/vuebook
  3. python 获取路径
  4. JDBC第三篇--【事务、元数据、改造JDBC工具类】
  5. 视图Ext.Viewport和窗口Ext.Window用法
  6. ASP.NET服务器对于请求的处理过程
  7. Java开发笔记(一百四十)JavaFX的选择框
  8. 写一个微信和支付宝订单的查询方法:
  9. Python数据类型(数字)
  10. 纯CSS实现的风车转动效果特效演示