語言整合查
語言整合查(英語:Language Integrated Query,縮寫:LINQ), 發音 " link ",是微軟的一項技術,新增一種自然查詢的 SQL 語法到 . NET Framework 的程式語言內底,這馬目前可支援 C # 以及 Visual Basic . NET 語言。二空空七年十一月十九隨在 . NET Framework 三-c五發布矣 LINQ 技術。
包括講 LINQ to Objects、LINQ to SQL、LINQ to Datasets、LINQ to Entities、LINQ to Data Source、LINQ to XML / XSD 等。
語言風格
LINQ 和語言的多項新增加風格,來展出查詢語言的擴充性。比如講:C # :
無頭路
無頭路(Anonymous type)是 C # 三更零與 Visual Basic 九嬸空新增的功能,伊允准開發人員會使使用無具型別的方式建立新的資料結構,真正的情形莫佇咧編譯時期,由 C # ( 抑是 VB ) Compiler 自動產生,並寫入編譯目的檔中,伊會當予開發人員會當真簡單利用匿名型別建立的物件,LINQ 中的 select 指令就是利用這款特性來建立回傳物件。
匿名類型本質上是表達元組(tuple), 採用值語意。
下列使用匿名型別的程式碼:
會由編譯器改寫:
擴展方法 ( Extension method )
Lambda 表達式 ( Lambda expression )
表達式樹 ( Expression tree )
查詢表達式語法
` ` ` from RangeVariable in IEnumerable < T > 抑是 IQueryable < T > 的 Collection < Standard Query Operators > < lambda expression > < select or groupBy operator > < result formation > ` ` `
滑溜語法
LINQ 查詢的時陣有兩種語法可供選擇:查詢表達式語法(Query Expression)佮流利語法(Fluent Syntax)。 前者使用查詢運算子;後者利用 System . Linq . Enumerable 類中定義的擴充方法和 Lambda 表達式的方式進行查詢。CLR 本身並無理解查詢表達式語法,伊干焦理解滑溜語法。編譯器負責共查詢表達式語法編譯做流利語法。
以下是一个範例 LINQ 方法語法的查詢,倒轉去陣內底的偶數:
對比較輾轉語法佮 C # 的傳統語法:
標準查詢運算子 ( Standard query operators )
System . Linq . Enumerable 靜態類別宣告一套標準查詢運算子(Standard Query Operators,SQO)方法集合。基本語法如下:
標準查詢運算子和 Lambda 表達式的關係非常密切。編譯器會欲描述表達式轉化為下述以 Lambda 表達式為參數的顯式擴充方法呼叫序列:
LINQ 的各式言語支援度
下列的言語支援 LINQ。
- C # 三-c零
- F # 一孵一 . 八否一
- Visual Basic 兩千空八(九九零)
註:C + + / CLI 猶未支援 LINQ。但是閣有第三方的 C + + 套件,以及第三方的 PHP 套件
LINQ 的範例
一个簡單例:
輸出: 四十九二十五一个例:
Visual Studio 支援
LINQ 目前由 Visual Studio 兩千空八、二千空一十、二千空一十二、二千空一十三、二千空一十五、二千空一十七、二千空一十九支援。
語言擴充
軟軟仔仝款提供矣 LINQExtender,允准使用者佇咧無了解 LINQ 實現鋩角的情形下,編寫家己的 LINQ 擴充。 如:LINQ to Twitter , LINQ to Oracle , LINQ to Active Directory 等
參考文獻
外部連結
- Official Microsoft LINQ Project(已經失效)
- 一百空一 C # LINQ Samples
- 一百空一 Visual Basic LINQ Samples
- Microsoft LINQ forum
- LINQ page on NetFXGuide . com
- LINQ wiki
- LINQExtender
參見
- 物件關聯對映(ORM)