电竞比分网-中国电竞赛事及体育赛事平台

分享

LinQ

 bigyellowdoc 2012-08-16


LINQ技術(shù):解決降低訪問和整合信息數(shù)據(jù)的復(fù)雜度的問題,即集合訪問技術(shù)

LINQ,語言級(jí)集成查詢(Language INtegrated Query)

C# 是編程語言,Database是數(shù)據(jù)庫,ADO.net是比較舊,但很穩(wěn)定的通過C#訪問和操作Database的一系列接口,而Linq是C#的擴(kuò)充功能,你把他理解為加強(qiáng)版的ADO.net,但他使用起來更像sql語句,但是他是在C#中直接使用的,他的實(shí)現(xiàn)原理是對(duì)ADO.net做了包裝,使用起來更方便一些而已。

所以訪問的過程是C#——>Linq——>ADO.net——>DataBase,如果你會(huì)Linq,則不用關(guān)心ADO.net了,如果你不會(huì),你的訪問過程是C#——>ADO.net——>DataBase

作為軟件開發(fā)人員,很難否認(rèn)我們很大一部分編程時(shí)間都是花在獲取和操作數(shù)據(jù)上。說到數(shù)據(jù),大概就會(huì)自然而然地想到包含在關(guān)系數(shù)據(jù)里的信息。另一個(gè)很流行的數(shù)據(jù)格式是XML文檔,例如,*.config 文件、保存在本地的 DataSet ,從 XML Web 服務(wù)返回的內(nèi)存中的數(shù)據(jù)等。

除了這兩個(gè)常見的信息來源外,還能在很多地方找到數(shù)據(jù)。例如,如果你有個(gè) list<T> 泛型,內(nèi)含 300 個(gè)整數(shù),你要獲取滿足某個(gè)給定條件(例如,僅奇數(shù)或偶數(shù),僅質(zhì)數(shù),僅大于500的不重復(fù)數(shù)字等)的子集?;蛘?,你也許要利用 反射API,從一個(gè)Type 數(shù)組中只想得到從一個(gè)特定父類繼承而來的每個(gè)類型的元數(shù)據(jù)描述。顯而易見,數(shù)據(jù)隨處可見。

在.NET 3.5 之前的版本,與特定類型的數(shù)據(jù)打交道時(shí),程序員要使用特定命名空間下的特定類型。例如,考慮一下表14-1,他列出了操作各種數(shù)據(jù)類型的常見 API。


操作各種數(shù)據(jù)的方式



我們想要的數(shù)據(jù) 得到這些數(shù)據(jù)的方式


關(guān)系數(shù)據(jù) System.Data.dll 和 System.Data.SqlClient.dll
xml文檔數(shù)據(jù) System.Xml.dll
元素報(bào)表 System.Reflection 命名空間
對(duì)象集合 System.Array 和 System.Collection / System.Collection.Generic 命名空間

當(dāng)然,這些操作數(shù)據(jù)的方法一點(diǎn)也沒問題。實(shí)際上,在.NET 3.5 / C# 3.0 編程時(shí),你肯定會(huì)直接使用 ADO.NET 、XML 命名空間、反射服務(wù)以及各種集合類型。但是,基本的問題在于,這些 API 的每一種本身只是孤島,提供極少的集成方法。沒錯(cuò),例如,你能把 ADO.NET DataSet 保存成 XML,然后通過 System.Xml 命名空間操作。但盡管如此,目前的數(shù)據(jù)操作依然相對(duì)地不對(duì)稱。

LINQ(語言級(jí)集成查詢)項(xiàng)目的意圖是提供一種統(tǒng)一且對(duì)稱的方式,讓程序員在廣義的數(shù)據(jù)上得到和操作 “數(shù)據(jù)” 。通過 LINQ ,我們能夠在 c#編程語言內(nèi)直接創(chuàng)建稱為查詢表達(dá)式 (query expression) 的實(shí)體,這些查詢表達(dá)式是基于許多查詢運(yùn)算符(queryoperator)的,而且是有意設(shè)計(jì)成類似 SQL 表達(dá)式的。

但不同之處在于,查詢表達(dá)式可以被用來與許多種數(shù)據(jù)交換,即使是那些與關(guān)系數(shù)據(jù)庫毫無關(guān)系的數(shù)據(jù)。具體來說,LINQ允許查詢表達(dá)式以統(tǒng)一的方式來操作任何通過擴(kuò)展方法直接或間接實(shí)現(xiàn)了 IEnumerable<T>接口的對(duì)象,關(guān)系數(shù)據(jù)庫,DataSet或者XML文檔。

說明:嚴(yán)格來說,LINQ是用來描述數(shù)據(jù)訪問的總體方式的術(shù)語。LINQ to Object 是針對(duì)實(shí)現(xiàn)了 IEnumerable<T> 對(duì)象的 LINQ;LINQ to SQL 是針對(duì)關(guān)系數(shù)據(jù)庫的 LINQ; LINQ to XML 是針對(duì) XML 文檔的 LINQ。將來還會(huì)有其他一些具有 LINQ 功能的API。

一、LINQ 表達(dá)式是強(qiáng)類型和可擴(kuò)展的
需要特別指出的是,LINQ查詢表達(dá)式,跟傳統(tǒng)的sql語句有所區(qū)別,是強(qiáng)類型的。所以,c#編譯器會(huì)讓我們老老實(shí)實(shí)地保證這些表達(dá)式在語法上是合法的。另外需要注意的是,查詢表達(dá)式在利用它們的程序集中擁有對(duì)應(yīng)的元數(shù)據(jù)表示。

在深入探究 LINQ 細(xì)節(jié)之前,需要指出最后一點(diǎn)是,LINQ被設(shè)計(jì)為一個(gè)可擴(kuò)展的技術(shù)。雖然這個(gè)早期的 LINQ版本是針對(duì)關(guān)系數(shù)據(jù)庫、DataSet、XML文檔和實(shí)現(xiàn)了 IEnumerable<T> 的對(duì)象,但第三方供應(yīng)商針對(duì)其他數(shù)據(jù)類型,可以通過擴(kuò)展方法融入新的查詢運(yùn)算符,或者重新定義現(xiàn)有的運(yùn)算符。

二、 核心 LINQ 程序集

下面描述了核心 LINQ 程序集。


程序集 內(nèi)容描述


System.Core.dll 定義了代表核心 LINQ API 的類型。這是個(gè)你必須訪問的程序集
System.Data.Linq.dll 提供了使用 LINQ 訪問關(guān)系數(shù)據(jù)庫所需的功能(LINQ to SQL)
System.Data.DataSetExtensions.dll 定義了許多類型來將 ADO.NET 類型融入 LINQ 編程范式 (LINQ to DataSet)
System.Xml.Linq.dll 提供了使用 LINQ處理 Xml 文檔數(shù)據(jù)所需的功能 (LINQ to XML)

不管進(jìn)行何種 LINQ 編程,至少要導(dǎo)入 System.Linq 命名空間(定義在 System.Core.dl 中)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多