• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    淺析LINQ技術(shù)原理及應(yīng)用

    2014-04-29 00:00:00唐磊

    摘 要:LINQ,語(yǔ)言級(jí)集成查詢(Language Integrated Query),是一種數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),LINQ提供了一條更常的途徑,.Net Framework添加一些可以應(yīng)用于所有信息源的具有多種用途的語(yǔ)法查詢特性,這是比向開(kāi)發(fā)語(yǔ)言和運(yùn)行時(shí)添加一些關(guān)系數(shù)據(jù)特性或者類似XML特性更好的方式。

    關(guān)鍵詞:LINQ;查詢;ADO.NET;DataSet;SQL

    中圖分類號(hào):TP311.13

    LINQ是Language Integrated Query的簡(jiǎn)稱,它是集成在.NET編程語(yǔ)言中的一種特性。已成為編程語(yǔ)言的一個(gè)組成部分,在編寫(xiě)程序時(shí)可以得到很好的編譯時(shí)語(yǔ)法檢查、豐富的元數(shù)據(jù)、智能感知、靜態(tài)類型等強(qiáng)類型語(yǔ)言的好處。并且它同時(shí)還使得查詢可以方便地對(duì)內(nèi)存中的信息進(jìn)行查詢而不僅僅只是外部數(shù)據(jù)源。

    1 LINQ的基本語(yǔ)法

    在.NET框架中,LINQ包含在System.Linq命名空間內(nèi),它的基本語(yǔ)法結(jié)構(gòu)為:

    <結(jié)果類型> <查詢結(jié)果對(duì)象>=

    from <范圍變量> in <數(shù)據(jù)源>

    [where <布爾表達(dá)式>]

    [orderby <排序關(guān)鍵字>][ascending|descending]

    [group <范圍變量> by <分組關(guān)鍵字> into <分組標(biāo)識(shí)符>]

    [join <范圍變量> in <連接數(shù)據(jù)源> on <連接條件>]

    select <查詢結(jié)果>

    通常<結(jié)果類型>使用var關(guān)鍵字讓系統(tǒng)編譯器在編譯時(shí)推斷查詢變量的類型,也可以使用查詢變量的顯示類型來(lái)指定查詢結(jié)果類型。

    from子句用于指定“范圍變量”及“數(shù)據(jù)源”,“范圍變量”用于每個(gè)數(shù)據(jù)源對(duì)象的引用,數(shù)據(jù)源可以是各種內(nèi)存數(shù)據(jù)。

    where子句用于查詢結(jié)果的篩選。

    orderby子句用于查詢結(jié)果排序。

    groupby子句用于查詢結(jié)果的分組,查詢結(jié)果的每個(gè)元素是一個(gè)具有鍵值對(duì)象及根據(jù)該鍵分組的元素列表的對(duì)象。在循環(huán)訪問(wèn)生成組序列的查詢時(shí),必須使用嵌套的循環(huán),外部循環(huán)用于循環(huán)訪問(wèn)每個(gè)組,內(nèi)部循環(huán)用于訪問(wèn)每個(gè)組所對(duì)應(yīng)的元素列表的對(duì)象。

    joinon子句用于將指定的鍵來(lái)做關(guān)聯(lián)操作。

    select子句用于從容器中選擇一個(gè)序列。

    2 LINQ查詢

    LINQ查詢通過(guò)提供一種跨各種數(shù)據(jù)源和數(shù)據(jù)格式使用數(shù)據(jù)的一致模型,簡(jiǎn)化了查詢過(guò)程。LINQ查詢分為對(duì)內(nèi)存對(duì)象的查詢(LINQ to Object)、對(duì)SQL Server數(shù)據(jù)庫(kù)的查詢(LINQ to SQL)、對(duì)ADO.NET DataSet的查詢(LINQ to DataSet)、對(duì)XML數(shù)據(jù)的查詢(LINQ to XML)以及對(duì)由ADO.NET實(shí)體框架創(chuàng)建的實(shí)體集進(jìn)行查詢(LINQ to Entities)。

    2.1 LINQ to Object。LINQ to Object直接對(duì)任意IEnumerable或IEnumerable集合使用LINQ查詢,無(wú)須使用中間LINQ提供程序或API??梢允褂肔INQ查詢?nèi)魏慰擅杜e的集合,如List、Array或Dictionary(TKey,TValue)。

    2.2 LINQ to SQL。在LINQ to SQL中,關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)模型映射到開(kāi)發(fā)人員所用的編程語(yǔ)言表示的對(duì)象模型。當(dāng)應(yīng)用程序運(yùn)行時(shí),LINQ to SQL會(huì)將對(duì)象模型中的語(yǔ)言集成查詢轉(zhuǎn)換為SQL。然后將它們發(fā)送到數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行。當(dāng)數(shù)據(jù)庫(kù)返回結(jié)果時(shí),LINQ to SQL會(huì)將它們轉(zhuǎn)換回開(kāi)發(fā)人員所用的編程語(yǔ)言處理的對(duì)象。

    2.3 LINQ to DataSet。使用LINQ to DataSet時(shí),使用本質(zhì)上和查詢對(duì)象集合相同的語(yǔ)法。畢竟,DataSet其實(shí)只是一組DataTable實(shí)例,而DataTable是一組DataRow對(duì)象。但是,對(duì)DataSet有一個(gè)明顯的限制—它沒(méi)有顯示強(qiáng)類型數(shù)據(jù)。相反,要使用Field擴(kuò)展方法把字段值強(qiáng)制轉(zhuǎn)換為適當(dāng)?shù)念愋?。Field由System.Data命名空間中的DataRowExtensions類提供,它擴(kuò)展所有DataRow對(duì)象,并能夠以強(qiáng)類型的方式訪問(wèn)字段。

    2.4 LINQ to XML。LINQ to XML是一種啟用了LINQ的內(nèi)存XML編程接口,可以在.NET Framework編程語(yǔ)言中處理XML。它將XML文檔置于內(nèi)存中,這一點(diǎn)很像文檔對(duì)象模型(DOM)??梢圆樵兒托薷腦ML文檔。但是,LINQ to XML與DOM不同:它提供一種使用方便,更輕量的對(duì)象模型。

    2.5 LINQ to Entities。LINQ to Entities是Entity Framework的一部分并且取代LINQ to SQL作為在數(shù)據(jù)庫(kù)上使用LINQ的標(biāo)準(zhǔn)機(jī)制。Entity Framework是行業(yè)領(lǐng)先的對(duì)象—關(guān)系映射(ORM)系統(tǒng),可以和多種數(shù)據(jù)庫(kù)一起使用,并支持各種靈活、復(fù)雜的數(shù)據(jù)模型。LINQ to Entities作為Entity Framework的一部分,它可以使用Entity Framework數(shù)據(jù)模型來(lái)執(zhí)行LINQ查詢。

    3 LINQ應(yīng)用實(shí)例

    下面以實(shí)例—城市Bothell街道信息查詢說(shuō)明LINQ查詢的應(yīng)用,部分程序代碼如下:

    DataContextClassesDataContext db = new DataContextClassesDataContext();

    Table

    Addresses = db.GetTable
    ();

    db.Log = Console.Out;

    IQueryable

    addrQuery =

    from addr in Addresses

    where addr.City == \"Bothell\"

    select addr;

    foreach (Address addr in addrQuery)

    {

    Console.WriteLine(\"AddressID={0},AddressLine={1}\",addr.AddressID,addr.AddressLine1);

    }

    在代碼中,變量Addresses則為System.Data.Linq命名空間中的Table類對(duì)象,相當(dāng)于數(shù)據(jù)庫(kù)中的數(shù)據(jù)表,變量addrQuery則是查詢結(jié)果集,addr.City則是查詢條件。

    4 結(jié)束語(yǔ)

    綜上所述,使用LINQ數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),可以直接通過(guò)編程語(yǔ)言查詢和操作內(nèi)存數(shù)據(jù)、關(guān)系數(shù)據(jù)、XML文檔和實(shí)體數(shù)據(jù),使得對(duì)數(shù)據(jù)的查詢和操作更簡(jiǎn)便。使用LINQ技術(shù)無(wú)需使用復(fù)雜的編程技巧就可合并數(shù)據(jù)源,讓開(kāi)發(fā)者的開(kāi)發(fā)效率更大地提高。

    參考文獻(xiàn):

    [1]田江.淺談LINQ訪問(wèn)技術(shù)[J].科教文匯,2009(21):275.

    [2]韓雙旺.淺談LINQ數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)研究[J].自動(dòng)化與儀器儀表,2011(04):13.

    [3]馬鵬烜.基于LINQ to Entity數(shù)據(jù)訪問(wèn)技術(shù)的應(yīng)用研究[J].現(xiàn)代計(jì)算機(jī),2011,7(05):11.

    [4](美)謝菲爾德(Shepherd,G.)著,張大威譯.ASP.NET 4從入門到精通[M].北京:清華大學(xué)出版社,2011.

    [5](美)麥克唐納(MacDonald,M.),(美)弗里曼(Freeman,A.),(美)茲普茲塔(Szpuszta,M.)著.博思工作室譯.ASP.NET 4高級(jí)程序設(shè)計(jì)(第4版)[M].北京:人民郵電出版社,2011.

    [6](美)特羅爾森(Troelsen,A.)著,朱曄等譯.C#與.NET 4高級(jí)程序設(shè)計(jì)(第5版)[M].北京:人民郵電出版社,2011.

    作者簡(jiǎn)介:唐磊(1983-),男,重慶萬(wàn)州人,現(xiàn)就職于現(xiàn)代教育技術(shù)中心,助教,主要研究方向:計(jì)算機(jī)網(wǎng)絡(luò)及軟件開(kāi)發(fā)。

    作者單位:重慶三峽職業(yè)學(xué)院,重慶 404155

    咸丰县| 吉隆县| 安平县| 仙游县| 平湖市| 大足县| 共和县| 泸定县| 拜城县| 怀安县| 抚顺县| 遵义县| 砚山县| 奉节县| 澄迈县| 蓝山县| 汕头市| 沙坪坝区| 临邑县| 宜春市| 莱芜市| 定南县| 敦化市| 三江| 上思县| 修水县| 东乌珠穆沁旗| 铁岭市| 石河子市| 金堂县| 敦煌市| 济南市| 航空| 武宣县| 辽宁省| 当涂县| 白朗县| 赤峰市| 上思县| 大关县| 孟连|