BKJIA獨家特稿】本文主要是對語言級整合查詢或簡稱為LINQ做一個介紹,包括LINQ是什麼,不是什麼,並對它在語言特性方面做一個簡短的回顧,然後舉一些使用LINQ的實際例子進行說明。
語言級整合查詢是什嗎?
在我過去寫的大多數文章中,即使是最早的一篇文章資料庫獨立的資料訪問),也總是涉及到訪問和操縱資料,通常,資料是儲存在資料庫中的,但也有其他種類訪問和操縱資料如資料檔案,事件記錄,註冊表等的方式,查詢和操縱資料是許多應用程式通用的部分。
LINQ經常聽到有人發音與link一樣)在資料訪問方面向前推進了一大步,它是一個編程模型,無論是訪問檔案、XML、資料庫、註冊表、事件記錄、活動目錄,還是第三方如Flickr的資料,都使用統一的方法進行訪問,它設計與所有不同形態,不同大小的資料一起工作,允許你在所有這些資料上執行查詢,設定和轉換。
LINQ不是什麼
理解一下LINQ不是什麼對於理解它是什麼非常有協助,我最常聽見的是人們將LINQ認為是嵌入式SQL,我要說的是,它不是嵌入式SQL,儘管LINQ的文法與SQL文法在某些方面非常相似,但它的確不是嵌入式SQL,而且它也不局限於只能查詢資料庫,.NET語言大部分都不是自動就支援LINQ的,對常見語言運行時CLR)不用做修改,修改的是語言和它們的編譯器,它需要特定語言的擴充,Visual Basic .NET 9.0和C# 3.0已經整合了對LINQ的支援。
LINQ開啟的語言特性
LINQ大量使用了類,此外,對Visual Basic和C#語言也進行了大量的擴充以支援LINQ,最近有許多文章介紹這些新的語言特性,作為LINQ的先兆,下面簡要列出一部分LINQ語言特性協助開啟LINQ之路:
◆類型介面:代表不同類型的簡寫是編譯時間右邊賦值的類型
◆擴充方法:擴充一個現有的值或參考型別而不產生一個新的類型
◆對象初始程式:對象初始化文法產生的等效代碼的簡寫形式
◆匿名型別:不合成方法或類型建立聲明
◆Lambda運算式:建立排隊方法的簡單途徑
◆查詢運算式:在代碼中操作對象時與SQL類似
我確信這些語言特性對於LINQ自身肯定有益,但我還沒有親自找到理由在LINQ之外使用它們。
LINQ風格
在訪問和操縱不同資料來源方面LINQ有多種風格,後面的清單包括了一些由微軟提供的資料域,它們中任何一個將來都可能成為.NET的核心話題:
◆物件導向的LINQ:操縱對象的集合
◆面向資料集的LINQ:使用LINQ操縱資料集
◆面向SQL的LINQ:在自訂類型和資料庫表語句集之間建立映射
◆面向實體的LINQ:使用一個概念性的實體資料模型建立一個物理資料庫的概念性模型
◆面向XML的LINQ:允許查詢和操縱XML