LINQ ORM详细比较

开发 后端
这里介绍LINQ ORM都是一种技术概念,LINQ是一种语言特性,在语言(Language)中集成(Integrate)查询(Query)句法,ORM是Object/Relation Mapping。

LINQ有很多值得学习的地方,这里我们主要介绍LINQ ORM之间的关系,包括介绍LINQ to SQL是.NET 3.5内置的一个轻量级O/R Mapping解决方案等方面。

1.LINQ不是ORM,确切地来说,他们之间的关系是:

LINQ的一个子集是属于ORM的

2.他们之间的唯一的相同点是:

LINQ ORM都是一种技术概念,而不是一种实现,最大的区别就在于——他们根本就不是一路东西!

LINQ是一种语言特性,在语言(Language)中集成(Integrate)查询(Query)句法,所以才叫LINQ——Language-Integrated Query,目的是以一种看起来像SQL的方式来完成原本你需要去foreach的工作——最显著的就是集合操作,比如搜索啊,排序啊,批量更新啊。因为 SQL是为关系数据库而存在的,关系数据理论是建立在集合论的基础上的,所以集合操作当然是最本职的工作啦!

ORM是Object/Relation Mapping。Object是哪路?是Object Oriented Programming那路Object,Relation是哪路?是关系数据理论那路Relation,ORM的作用是在对象和关系之间建立映射,让开发者可以以面向对象的方式去完成一些关系数据操作——这些原本需要用关系代数、关系操作语言,这些通常看起来有点生硬,还得花心思去专门学的东西来解决的操作。

LINQ ORM就不是一路上的东西,但是为什么很多人会把他们扯在一起呢?

3.有两个最主要的原因

第一:LINQ长得太像SQL了!SQL是关系数据访问领域目前阶段当之无愧的带头大哥,ORM是一个挺时髦的关系数据访问面向对象化解决方案,也和SQL离不开关系,两者就靠SQL搭上边了。

第二:LINQ to SQL的存在。LINQ to SQL是一个ORM框架,它利用了LINQ的便捷性和LINQ长得像SQL这个特点,实现了一个用LINQ来完成关系型数据库(这里是SQL SERVER)数据访问的便捷通道。

4.LINQ / LINQ to SQL / LINQ to XXX

LINQ是新生事物,不过从不少文章和讨论上看来,这方面的概念也已经有点混沌不清了。因此我们经常可以看到这样的话:

◆LINQ只能将数据表与实体属性一一对应……
◆LINQ开发指南:在LINQ中进行数据库字段映射……

以上两句话其实说的都是LINQ to SQL而不是指LINQ。可能由于LINQ to SQL的上镜率最广(连MSDN上About LINQ的第一个示例就是查询数据库的),因此许多人都将LINQ to SQL与LINQ混用,这会给初学者造成误解,认为LINQ就是LINQ to SQL,LINQ to SQL就是LINQ——事实当然不是这样的。

LINQ是Language-Integrated Query的缩写,是C# 3.0和VB 9.0中新加入的语言特性,可以在编程时使用内置的查询语言进行基于集合的操作。这么做可以大大简化开发过程,提高开发效率。例如:

  1. List userList = GetUserList();  
  2. var userWithOddId = from u in userList  where u.UserID % 2 == 1  select u;   
  3. foreach (User u in userWithOddId)  {  
  4. Console.WriteLine(u.UserName);  
  5. }   

如果没有LINQ,要筛选出ID为奇数的User对象则需要创建一个List,然后遍历整个列表,将符合特定条件的User对象放入新列表。而有了 LINQ,这部分的筛选就变得非常容易,甚至只需要一句话就能完成。如果觉得这个例子不够说明LINQ对生产力有重大贡献的话,请关注我接下来的一篇文章(暂定名为《我们为什么要拥抱LINQ》)。LINQ特指形如上面这段代码中from...where...select这样的用法,其返回值是 IQueryable。

LINQ to SQL是.NET 3.5内置的一个轻量级O/R Mapping解决方案,可以将数据表映射为实体对象,方便开发人员对数据库的操作。可见,LINQ to SQL实只是LINQ的一个实现,提供了一个可以查询SQL Server数据库的LINQ Provider。

LINQ Provider是LINQ 查询的执行器,标准LINQ语法支持许多的操作符,但是某个具体的LINQ实现可能只支持其中的一部分。在.NET 3.5默认提供了三种LINQ Provider,分别是LINQ to Object(即上面的例子),LINQ to SQL以及LINQ to XML。

LINQ to XXX表示使用LINQ针对XXX这种数据进行查询的解决方案。我们可以自定义LINQ Provider,使用我们自定义的查询规则来处理特定数据集。目前互联网上已经可以找到数十种LINQ Provider(如LINQ to Flickr,LINQ to NHibernate等),而已经处于beta 3阶段的ADO.NET Entity Framework,最终也会提供一个LINQ Provider,叫做“LINQ to Entities”。以上介绍LINQ ORM。

【编辑推荐】

  1. LINQ查询操作剖析
  2. LINQ生成字符串概述
  3. LINQ查询语法简单描述
  4. LINQ解决方案简单概述
  5. LINQ查询结果分析
责任编辑:佚名 来源: IT168
相关推荐

2009-09-14 17:40:47

LINQ To SQL

2009-09-15 13:59:18

LINQ to Dat

2009-09-08 13:07:15

介绍Linq to S

2009-09-18 09:25:06

LINQ Framew

2009-09-14 15:15:45

LINQ技术

2009-09-14 14:17:11

Linq异常处理

2009-09-14 16:33:55

LINQ To XML

2009-09-17 13:10:48

linq动态排序

2009-09-14 14:58:52

LINQ to XML

2009-09-14 13:14:49

LINQ序列

2009-09-15 13:20:34

LINQ DataCo

2009-07-29 08:58:20

NHibernate ORM框架

2009-12-15 18:39:36

Ruby Active

2009-09-17 10:40:22

Linq Lambda

2009-09-14 13:50:35

LINQ编程模型

2009-09-08 15:56:50

Linq使用Group

2009-09-14 16:21:34

LINQ To XML

2009-09-09 09:48:43

Linq延迟加载

2009-09-08 11:09:39

LINQ数据源

2009-06-26 15:17:44

SDOEJB 3.0
点赞
收藏

51CTO技术栈公众号