簡述
除了最簡單的應用程式,幾乎所有應用程式都需要處理數據。歷史上,大多數應用程式都是提供自己的邏輯來執行這些操作。然而,這個設計會造成應用程式中的代碼與它要處理的數據緊密“耦合”;一旦數據結構發生變化,就可能需要大幅修改代碼才能適應變化。Microsoft .NET Framework的設計者對程式設計師的苦惱感同身受。經過長時間的慎重考慮,他們最終提供了一個功能,對從應用程式代碼中查詢數據的機制進行了“抽象”。這個功能稱為“語言集成查詢”。
LINQ的設計者大量借鑑了關係資料庫管理系統(例如Microsoft SQL Server)的處理方式,將“資料庫查詢語言”與“數據在資料庫中的內部格式”分隔開。為了訪問SQL Server資料庫,程式設計師要向資料庫管理系統傳送SQL語句。SQL提供了對想要獲取的數據的一個高級描述,但並沒有明確指出資料庫管理系統應該如何獲取這些數據。這些細節由資料庫管理系統自身控制。所以,調用SQL語句的應用程式不需要關心資料庫管理系統如何物理性地存儲或檢索數據。如果資料庫管理系統使用的格式發生改變(例如,當新版本發布的時候),應用程式的開發者不需要修改應用程式使用的SQL語句。
LINQ的語法和語義和SQL很像,具有許多相同的優勢。要查詢的數據的內部結構傳送改變後,不必修改查詢代碼。注意,雖然LINQ和SQL看起來很像,但LINQ更加靈活,而且能處理範圍更大的邏輯數據結構。例如,LINQ能處理以層次化的方式組織的數據,例如XML文檔中的數據。
主要技術
LINQ技術主要包括4個獨立技術:LINQ tO Objects、LINQ to SQL、LINQ to DataSet和LINQ to XML。它們分別查詢並處理對象數據(如集合等)、關係數據(如SQL Server資料庫等)、DataSet對象數據和XML結構(如XML檔案)數據。使用LINQ可以大量減少查詢或運算元據庫或數據源中數據的代碼,並在一定程度上避免了SQL注入,提供了應用程式的安全性。
1.LINQ to Objects
使用LINQ to Objects提供程式可以查詢記憶體中的集合和數組。如果對象支持IEnumerable或IEnumerable<T>接口,則可以使用LINQ to Objects提供程式對其進行查詢。用戶可以通過導入System. Linq命名空間來啟用LINQ to Objects提供程式。
2.LINQ to XML
使用LINQ to XML提供程式可以查詢和修改XML既可以修改記憶體中的XML,也可以從檔案載入XML以及將XML保存到檔案。
3.LINQ to DataSet
使用LINQ to DataSet提供程式可以查詢和更新ADO.NET數據集中的數據,可以將LINQ功能添加到使用數據集的應用程式中,以便簡化和擴展對數據集中的數據進行查詢、聚合和更新的功能。
4.LINQ to SQL
使用LINQ to SQL提供程式可以查詢和修改SQL Server資料庫中的數據,這樣就可以輕鬆地將應用程式的對象模型映射到資料庫中的表和對象。
使用
使用LINQ的關鍵主要有兩點:一個是查詢表達式,另一個是對象關係設計器(O/R設計器),其形式有些類似於數據集設計器。掌握了這兩個關鍵技術,其他LINQ技術均可迎刃而解。
所有的LINQ查詢操作都由以下三部分組成:
1)獲取數據源。
2)創建查詢,定義查詢表達式,並將查詢表達式保存在某個查詢變數中。
3)利用查詢變數執行查詢。
顯示查詢結果的方法主要有三種:
1)調用查詢變數的屬性或方法獲取進一步的結果。
2)在foreach語句中,通過遍歷查詢變數得到所有查詢結果。
3)用數據綁定顯示查詢結果,即將BindingSource綁定到查詢變數,再將控制項綁定到BindingSource,然後在窗體上將結果顯示出來。
特點
LINQ定義了一組可以在.NET Framework 3.5及以上版本中使用的通用標準查詢運算符,使用這些標準查詢運算符可以投影、篩選和遍歷記憶體中的上述數據集中的數據。對LINQ的幾個優點說明如下。
一、集成性
把查詢語法集成到C#語言中,成為C#的一種語法;把以前複雜查詢前的工作都集成封裝起來,讓開發人員側重於查詢。
二、統一性
對於支持的數據源使用統一的查詢語法,使代碼維護變得更加簡單。
三、可擴展性
LINQ提供了LINQ provider model,可以為LINQ創建或提供provider讓LINQ支持更多的數據源,如LINQ to JavaScript和LINQ to MySQL等。
四、說明式編程
開發人員只要告訴程式做什麼,程式自己判斷怎么做,從而提高了開發速度。
五、抽象性
使用面向對象的方式抽象數據。LINQ通過所謂的O-R Mapping方式把關係型轉換成對象與對象方式描述數據。
六、可組成性
LINQ可以把一個複雜的查詢拆分成多個簡單查詢。LINQ返回的結果都是基於IEnumerable<T>接口,因此能對查詢結果繼續查詢。
七、可轉換性
LINQ能把一種數據源的內容轉換到其他數據源,方便用戶做數據移植。