LINQ ORM详细比较
创始人
2024-06-06 22:41:30
0

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查询结果分析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...