这几天在读一本LINQ方面的书《Essential LINQ》,在这里和大家分享下。

由于对LINQ的深入总结需要大量的篇幅,因此在这里分成几个部分来讲。

(*我看《Essential LINQ》是英文版的,有些名词不能翻译成正统的中文解释请给予谅解)

LINQ的优点:

LINQ基本有以下七个优点,让我来一一举例说明:

1.Integrated:所谓的Integrated(集成化),LINQ是从以下方面体现集成的:

(1):把查询语法融入了C#(VB)这些语言中,让他变成了一种语法。这样就能和C#中的其他语法一样支持:

语句高亮显示,类型检查,允许使用debugger调试

(2):把以前复杂的查询前的工作都集成封装起来,让开发人员侧重于查询。

(3):集成后的语法更加的清晰易懂,可读性较高。

比较:

            //原来的格式SqlConnection sqlConn = new SqlConnection(connectionString);sqlConn.Open();SqlCommand command = new SqlCommand();command.Connection = sqlConn;command.CommandText = "Select * From Customer";SqlDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);//LINQ的格式NORTHWNDDataContext dc = new NORTHWNDDataContext();var query = from c in dc.Customersselect c;

2.Unitive:所谓Unitive(统一化)就指不管对任何类型外部和内部数据源(对象集合,xlm,数据库数据)都使用统一的查询语法。

使用统一化查询语言的好处在于以下几点:

  • 你不用因为要使用不太熟悉的数据源而花很多精力去了解它,你可以快速简单的使用LINQ语法对起查询。
  • 由于使用了统一的语法,可以使代码维护变的更加简单。

以下代码体现了LINQ的统一化:

//数据源:对象集合
var query = from c in GetCustomers()select c;//数据源:SQL
var query1 = from c in dc.Customersselect c;
//数据源:XML
var query2 = from c in customers.Descendants("Customer")select c;

3.Extensible:所谓Extensible(可扩展)指以下2个方面:

(1).可查询数据源的扩展。 LINQ提供了个LINQ provider model,你可以为LINQ创建或提供provider让LINQ支持更多的数据源。

(2).可扩展查询方法。开发者可以根据自己的需求为LINQ重写和扩展查询方法。

以下是些第三方的LINQ provider:

LINQ Extender, LINQ to JavaScript, LINQ to JSON, LINQ to MySQL, LINQ to Flickr, LINQ to Google

4.Declarative:所谓Declarative(声明式),简单的来说指的是开发人员只要告诉程序做什么,程序自己判断怎么做。

Declarative programming(声明式编程)的优点体现在以下2点:

(1).提高了开发速度。因为开发者不用书写大量的代码来具体化执行步骤,只许告诉程序做什么。

(2).提高代码优化空间。因为开发者不用参与干涉对程序执行的具体步骤,这样就提供给编译器更多的空间去优化代码。

举例SQL来说,LINQ生成的SQL语句往往比一对SQL水平一般的开发者能写出更好的SQL语句。

比较Declarative programming 与 Imperative programming:

//声明式编程
List<List<int>> lists = new List<List<int>> { new List<int> { 1, 2, 3 }, new List<int> { 4, 5 } };
var query = from list in listsfrom num in listwhere num % 3 == 0orderby num descendingselect num;//命令式编程
List<int> list1 = new List<int>();
list1.Add(1);
list1.Add(2);
list1.Add(3);
List<int> list2 = new List<int>();
list2.Add(4);
list2.Add(5);
List<List<int>> lists1 = new List<List<int>>();
lists1.Add(list1);
lists1.Add(list2);List<int> newList = new List<int>();
foreach (var item in lists1)foreach (var num in item)if (num % 3 == 0)newList.Add(num);
newList.Reverse();

5.Hierarchical:所谓Hierarchical(层次化)指使用面向对象的方式抽象数据。

SQL是关系型数据库,它以关系的方式描述数据以数据的联系,但我们的程序设计成面向对象的因此我们在程序里得到的数据库数据往往都是

rectangular grid(平面的显示数据)。但是LINQ通过所谓的O-R Mapping方式,把关系型转换成对象与对象方式描述数据。

这样带来的好处是:开发者能直接以对象的方式去操作数据,对习惯面向对象的开发者来说面向对象模型更易理解。

6.Composable:所谓Composable(可组成)指LINQ可以把一个复杂的查询拆分成多个简单查询。

LINQ返回的结果都是基于接口:IEnumerable<T>,因此能对查询结果继续查询,而且LINQ具有延迟执行的特性因此拆分执行不会影响效率。

优点在于:

(1).方便调试。把复杂的查询拆分成简单的查询,然后逐个调试。

(2).便于代码维护。把代码拆分后能使代码变的更易理解。

以下代码体现了可组成性:

//以下代码体现了Composable
List<List<int>> lists = new List<List<int>> { new List<int> { 1, 2, 3 }, new List<int> { 4, 5 } };
var query1 = from list in listsfrom num in listselect num;var query2 = from num in query1where num % 3 == 0select num;var query3 = from num in query2orderby num descendingselect num;

7.Transformative:所谓Transformative(可转换)指的是LINQ能把一种数据源的内容转换到其他数据源。

方便用户做数据移植。

以下代码体现了转换的特性:

//把关系型数据转换成XML型
var query = new XElement("Orders",from c in dc.Customerswhere c.City == "Paris"select new XElement("Order",new XAttribute("Address", c.Address)));

以上就是LINQ的几大优点,很高兴能在这里和大家分享。有任何不足之处请给予补充和纠正,谢谢光临小舍。

//2011/1/28 补充(LINQ TO SQL)

在LINQ TO SQL 方面,如果使用LINQ TO SQL可以有效的防止SQL注入,LINQ TO SQL 会把注入的代码当做无用的参数处理。

转载于:https://www.cnblogs.com/cq524919195/archive/2012/04/15/2449000.html

转载LINQ优点 自己学习用的相关推荐

  1. 觉着很厉害,就转载咯,指引学习用的

    一份连自己在说什么都不知道的快餐指引 phoenixlzx phoenixlzx 警告:本文包含一些可能令「正常人」反感的内容 在开始之前,先来了解几个事实. 互联网行业不需要天赋.在目前已知的互联网 ...

  2. 免费下载数据集(转载)--大数据学习用

    目前系统整理了一些网上开放的免费科研数据集,以下是分类列表以及下载地址,供高校和科研机构免费下载和使用. 金融 美国劳工部统计局官方发布数据 上证A股日线数据,1999.12.09 至 2016.06 ...

  3. 学习用5W1H来管理自己的项目/工作

    学习用5W1H来管理自己的项目/工作 最近开始需要系统化的思维模型,这只是一个开始,一下用脑图的形式来简介5W1H的具体内容: 先写xmind思维树的文本导出,后面附上图片.^ _ ^ 5W1H WH ...

  4. 学习用C#在Unity中创建一个2D Metroidvania游戏

    学习用C#在Unity中创建一个2D Metroidvania游戏 你会学到: 构建2D Unity游戏 用C#编程 玩家统计,水平提升,米尔和远程攻击 敌方人工智能系统 制定级别和级别选择 Lear ...

  5. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

    java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...

  6. (30)导入时如何定制spring-boot依赖项的版本【转载】【从零开始学Spring Boot】...

    此文章转载地址:http://www.tuicool.com/articles/RJJvMj3 请注重作者的版权. spring-boot通过maven的依赖管理为我们写好了很多依赖项及其版本,我们可 ...

  7. thonny python ide_学习用 Thonny 写代码:一个面向初学者的Python IDE

    原标题:学习用 Thonny 写代码:一个面向初学者的Python IDE 编译自: https://fedoramagazine.org/learn-code-thonny-python-ide-b ...

  8. 学习用Photoshop来设计简单的网页

    学习用Photoshop来设计简单的网页   从设计<动力文章系统2003>的两张网页开始: 一张是网站首页,一张是文章内容页 通过对这两张网页的完整设计初步掌握PS设计网页的基本操作. ...

  9. 【Flask】篇一:Error: Failed to find Flask application or factory in module “学习用“. Use “FLASK_APP=学习用:nam

    项目场景: 今天我们开始学习一下Flask,在运行到第一个最简单的应用时,出现了错误,让我们来看一下! 问题描述: 当我输入了flask run后,跳出一大堆的报错信息: Error: Failed ...

最新文章

  1. (译) 函数式 JS #2: 函数!
  2. c++ 多线程 垃圾回收器_JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)...
  3. Py之nltk:nltk包的简介、安装、使用方法、代码实现之详细攻略
  4. php 修改select标签,JS修改input,textarea,select标签的可读可写属性
  5. CSDN编程挑战——《交替字符串》
  6. css实现元素在div底部显示
  7. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理
  8. Linux下netstat常用,Linux netstat常用命令
  9. html写用户导入,用户基本信息录入.html
  10. margin和padding的四种写法
  11. vue单页面应用中node做反向代理的原理
  12. 提交不了_志愿提交不了,不一定是系统问题。为了成功填报,建议试试这7步...
  13. macos server 恢复安装_Sinter:一款针对macOS的用户模式应用程序授权系统
  14. WPF扫雷游戏(简略版)
  15. 开根号的笔算算法图解_用笔算开根号
  16. GNSS基本概述——GPS,BD,GLONASS,Galileo
  17. Pythonblog_henry_dx_新浪博客
  18. 网站建设费用贵和便宜有什么区别?
  19. No module named libs.resources
  20. 【Flutter】Dart 数据类型 布尔类型 ( 布尔类型定义 | 逻辑运算 )

热门文章

  1. 一个小型网站多少台服务器,小型企业局域网需要服务器的价格在多少左右(40台机器)...
  2. html怎么制作固定背景,使用CSS制作的页面背景固定和滚动效果
  3. 仓库货位卡标识牌_仓储管理中的货位与标识管理
  4. mysql客户端如何创建用户_mysql的创创建用户阶段 开启客户端登录和授权阶段
  5. 习题8_6与习题9_2
  6. Android客户端开发—开源数据库框架LitePal
  7. 基于pytorch的模型剪枝+模型量化+BN合并+TRT部署(cifar数据)(2)
  8. 基于梯度方向、极化变换和聚类算法的图像主特征直线检测
  9. 基于运动信息的物体检测(背景差分法、帧间差分法和光流法)。
  10. 优达学城《DeepLearning》2-5:风格迁移