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);
推荐阅读
|