最近一直利用業餘的時間來研究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架構圖:
<a href="http://blog.51cto.com/attachment/201201/180740934.gif" target="_blank"></a>
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