欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

LINQ的优势

最编程 2024-08-10 16:02:15
...

这是在外面转载的一篇关于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);