LINQ的优势

简介: 这是在外面转载的一篇关于linq优点的文章, 总结的很好,但是感觉还有优点没有总结出来。 以后我会在这里面在添加进来 ,并试着去总结一下 确定这几天在读一本LINQ方面的书《Essential LINQ》,在这里和大家分享下。

这是在外面转载的一篇关于linq优点的文章, 总结的很好,但是感觉还有优点没有总结出来。 以后我会在这里面在添加进来 ,并试着去总结一下 确定


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

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

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

 

LINQ的优点

  

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

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

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

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

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

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

  

比较: 

?
1
2
3
4
5
6
7
8
9
10
11
12
//原来的格式
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.Customers
             select c;

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
//数据源:对象集合
var query = from c in  GetCustomers()
             select c;
  
//数据源:SQL
var query1 = from c in  dc.Customers
              select 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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//声明式编程
List<List< int >> lists = new  List<List< int >> { new  List< int > { 1, 2, 3 }, new  List< int > { 4, 5 } };
var query = from list in  lists
             from num in  list
             where num % 3 == 0
             orderby num descending
             select 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).便于代码维护。把代码拆分后能使代码变的更易理解。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
//以下代码体现了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  lists
              from num in  list
              select num;
  
var query2 = from num in  query1
              where num % 3 == 0
              select num;
  
var query3 = from num in  query2
              orderby num descending
              select num;

 

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

方便用户做数据移植

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

?
1
2
3
4
5
6
//把关系型数据转换成XML型
var query = new  XElement( "Orders" ,
             from c in  dc.Customers
             where c.City == "Paris"
             select new  XElement( "Order" ,
                 new  XAttribute( "Address" , c.Address)));

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

目录
相关文章
|
NoSQL 索引
MongoDB查询优化:从 10s 到 10ms
本文是我前同事付秋雷最近遇到到一个关于MongoDB执行计划选择的问题,非常有意思,在探索源码之后,他将整个问题搞明白并整理分享出来。付秋雷(他的博客)曾是Tair(阿里内部用得非常官方的KV存储系统)的核心开发,目前就职于蘑菇街。
|
存储 数据采集 JSON
彻底搞懂监控系统,使用Prometheus +Grafana搭建完整的应用监控系统
监控是运维系统的基础,我们衡量一个公司/部门的运维水平,看他们的监控系统就可以了。一个完善的监控系统可以提高应用的可用性和可靠性,在提供更优质服务的前提下,降低运维的投入和工作量,为用户带来更多的商业利益和客户体验。下面就带大家彻底搞懂监控系统,使用Prometheus +Grafana搭建完整的应用监控系统。
16475 1
彻底搞懂监控系统,使用Prometheus +Grafana搭建完整的应用监控系统
|
存储 监控 关系型数据库
InnoDB中的各种锁及其应用
InnoDB中的各种锁及其应用
|
存储 开发框架 Java
【CLR C#】浅谈.Net的GC(垃圾回收)机制及其整体流程
在.NET程序开发中,为了将开发人员从繁琐的内存管理中解脱出来,将更多的精力花费在业务逻辑上,CLR提供了自动执行垃圾回收的机制来进行内存管理,开发人员甚至感觉不到这一过程的存在。.NET程序可以找出某个时间点上哪些已分配的内存空间没有被程序使用,并自动释放它们。自动找出并释放不再使用的内存空间机制,就称为垃圾回收机制。本文主要介绍.Net中的GC(垃圾回收)机制及其整体流程。
【CLR C#】浅谈.Net的GC(垃圾回收)机制及其整体流程
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1093 152