什么是Linq

简介:

最近一直利用业余的时间来研究Linq,估计这样的文章在对于园子里很多牛人来说就有点小儿科了,前段时间写了一个Linq To Sql体验的小例子,感觉很简洁程序上操作体验不错,我写这些的文章目的是自我学习笔记的备用和查看,当然是初学者很多地方理解不是很到位,若又偏差还请各位原谅并指出,也欢迎各位上来拍砖。

LINQ(发音:Link)是Language Integrated Query的简称,其中Integrated(adj/综合的,组合的) Query(n/问题.疑问),它是集成在.NET编程语言(例如:C#、VB.NET等)中的一种特性,目的是为.NET Framework提供更加通用和便利的信息查询方式,并且它对数据源提供了广泛的支持,而不仅仅局限于关系型数据库和XML

经过了最近 20 年,面向对象编程技术( object-oriented (OO) programming technologies )在工业领域的应用已经进入了一个稳定的发展阶段。程序员现在都已经认同像 类(classes)、对象(objects)、方法(methods)这样的语言特性。考察现在和下一代的技术,一个新的编程技术的重大挑战开始呈现出来,即面向对象技术诞生以来并没有解决降低访问和整合信息数据( accessing and integrating information )的复杂度的问题。其中两个最主要访问的数据源与数据库( database )和 XML 相关

LINQ 提供了一条更常规的途径即给 .Net Framework 添加一些可以应用于所有信息源( all sources of information )的具有多种用途( general-purpose )的语法查询特性( query facilities ),这是比向开发语言和运行时( runtime )添加一些关系数据( relational )特性或者类似 XML 特性( XML-specific )更好的方式。这些语法特性就叫做 .NET Language Integrated Query (LINQ)

来看一张Linq架构图:

LINQ是随.Net Framework3.5发布的微软的一项新技术。她的查询操作可以通过编程语言自身来传达,而不是像以往的查询那样通过字符串嵌入到应用程序代码中.

从上图可以很清晰看出Linq中五大组件,即Linq具有五大功能:

(1)Linq to Objects:处理对象和集合数据,即我们在程序中可以类似于,像我们在数据中通过SQL语句来查询Table中数据一样来查询我们的对象和集合。

(2)Linq to DataSets:查询DataSets对象数据,它针对任何形式的数据源都提供统一的查询方式,统一的语法,所以针对DataSets也是一样,我们可以很方便的操作

(3)Linq to Sql:全称基于关系数据的.NET语言集成查询,用以对象形式管理数据,并提供了丰富的查询功能,即我们对数据库查询基本可以实现和ADO一样的功能。但与其相比操作更加简单,过程更加集中,尤其是对数据库表和对象进行查询时,可以说有在数据库中操作的感觉

(4)Linq to XML:针对XML形式的数据,LINQ给出了更为简便的查询,使我们操作XML可以像操作Table一样得心应手

 (5)Linq to Entites:针对实体查询操作

LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable<T>接口的源,并且它还允许适合于目标域或技术的第三方特定域操作符来扩大标准查询操作符集,更重要的是,第三方操作符可以用它们自己的提供附加服务的实现来自由地替换标准查询操作符,根据LINQ模式的习俗,这些查询喜欢采用与标准查询操作符相同的语言集成和工具支持。

查询架构(图1)的延展性用来向LINQ提供SQL数据以及XML之上的工作实现。针对XML的查询操作符(LINQ to XML)采用一种高效、易用、内存中的XML工具在宿主编程语言中提供XPath/XQuery功能;针对关系型数据的查询操作符(LINQ to SQL)建立于公共语言类型系统中的基于SQL的模式定义的集成之上,当保持关系型模型表达能力和对底层存储的直接查询评测的性能时,这个集成在关系型数据之上提供强类型。

总而言之:LINQ是一种查询技术,由微软提供,她的最大亮点就是,就是将查询操作集成到开发环境中,成为开发语言的一部分,我们可以像写代码一样来创建查询操作或表达式



本文转自chenkaiunion 51CTO博客,原文链接:http://blog.51cto.com/chenkai/765464

相关文章
|
11月前
|
缓存 JavaScript
vue2知识点:消息订阅与发布
vue2知识点:消息订阅与发布
130 1
|
安全 5G 网络性能优化
5G中的AMF和SMF:概述和功能
【8月更文挑战第31天】
1663 0
|
数据采集 存储 人工智能
ChatPaper全流程加速科研:论文阅读+润色+优缺点分析与改进建议+审稿回复
ChatPaper全流程加速科研:论文阅读+润色+优缺点分析与改进建议+审稿回复
|
人工智能
阿里国际站推出AI极简出海计划
【2月更文挑战第19天】阿里国际站推出AI极简出海计划
354 1
阿里国际站推出AI极简出海计划
|
安全 网络安全
渗透测试之0day介绍
渗透测试之0day介绍
608 0
|
设计模式 运维 监控
系统权限的主要设计
系统权限是我们日常都在用的,但是,你知道要怎么设计一个系统权限吗
363 0
|
缓存 Java API
如何优雅的自定义ThreadPoolExecutor 线程池
java 中经常需要用到多线程来处理一些业务,非常不建议单纯使用继承Thread或者实现Runnable接口的方式来创建线程,那样势必有创建及销毁线程耗费资源、线程上下文切换问题。同时创建过多的线程也可能引发资源耗尽的风险,这个时候引入线程池比较合理,方便线程任务的管理
1308 0
|
数据采集 存储 人工智能
一颗GPU,秒出3D模型!OpenAI重磅新作:Point-E用文本即可生成三维点云模型(2)
一颗GPU,秒出3D模型!OpenAI重磅新作:Point-E用文本即可生成三维点云模型
694 0
|
存储 弹性计算 固态存储
给大家算一下阿里云500G服务器多少钱?
租用一个500G存储大小的云服务器一个月多少钱?只计算500G系统盘价格,如果仅仅是为了存储,对象存储OSS会更划算
1330 0
给大家算一下阿里云500G服务器多少钱?
|
监控 Android开发 网络架构
PABX电话系统相关说明
更高效地工作,而不是更努力地工作,是每个伟大团队努力实现的目标。当然,在寻找新的商务电话系统时,很容易被任何标榜为自动的选项所吸引。(我们明白了——当我们听到“自动化”这个词时,我们也会眼花缭乱。但是,在你说“把我的钱”给下一家为你提供私人自动分行交换(PABX)系统的公司之前,你需要知道这个术语的真正含义。
1103 0
PABX电话系统相关说明