技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁(yè) > 教程 > 服務(wù)器類(lèi) >

什么是linq技術(shù)?

來(lái)源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2018-07-18 06:16┆點(diǎn)擊:

語(yǔ)言集成查詢(xún) (LINQ) 是一組技術(shù)的名稱(chēng),這些技術(shù)建立在將查詢(xún)功能直接集成到 C# 語(yǔ)言(以及 Visual Basic 和可能的任何其他 .NET 語(yǔ)言)的基礎(chǔ)上。 借助于 LINQ,查詢(xún)現(xiàn)在已是高級(jí)語(yǔ)言構(gòu)造,就如同類(lèi)、方法、事件等等。

(1)什么是linq技術(shù)?

這個(gè)是在《ASP.NET高級(jí)程序設(shè)計(jì)第四版》第一章節(jié)中講解asp.net版本中有關(guān)于該技術(shù)的起源背景,linq是asp.net 3.5 中跟AJAX一起在原來(lái)2.0版本上引入的一項(xiàng)新技術(shù)。

接下來(lái)是13章節(jié)中的一些知識(shí)點(diǎn)結(jié)合我自己的理解,其中我自己也存在兩點(diǎn)疑惑,如果有精通的希望能指導(dǎo)一番,哈哈,進(jìn)入正題:

linq:縮寫(xiě)是language integrated query 語(yǔ)言集成查詢(xún),是一項(xiàng)操作內(nèi)存數(shù)據(jù)的技術(shù),看完一個(gè)小節(jié),感覺(jué)跟sql查詢(xún)的區(qū)別就是它可以將一些數(shù)據(jù)類(lèi)對(duì)象執(zhí)行查詢(xún)過(guò)濾,返回自己請(qǐng)求的數(shù)據(jù),也即是說(shuō)它既可以實(shí)現(xiàn)c#源代碼環(huán)境中的對(duì)象數(shù)據(jù)查詢(xún),也可以實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)訪問(wèn)。

linq技術(shù)為我們開(kāi)發(fā)人員提供了五個(gè)比較實(shí)用的數(shù)據(jù)訪問(wèn)類(lèi)型:

LinQ to Object:可以允許對(duì)內(nèi)存中的類(lèi)對(duì)象查詢(xún)。

LinQ to DataSet:可以對(duì)內(nèi)存中的DataSet緩存數(shù)據(jù),執(zhí)行數(shù)據(jù)訪問(wèn)。

LinQ to xml :針對(duì)XML數(shù)據(jù)的一種解析封裝可以實(shí)現(xiàn)傳統(tǒng)xml解析效果。

LinQ to Entity:這是目前l(fā)inq技術(shù)比較流行的一個(gè)亮點(diǎn)了,它提供了對(duì)關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問(wèn),可以使得開(kāi)發(fā)者不必通過(guò)編寫(xiě)負(fù)責(zé)ADO.NET的數(shù)據(jù)訪問(wèn)層就可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn),也可以?xún)烧咭黄鸾Y(jié)合使。LinQ相對(duì)ADO.NET的優(yōu)勢(shì)在哪里呢?它真的有ADO.NET如此強(qiáng)大的數(shù)據(jù)訪問(wèn)功能呢?這是我今天的第一個(gè)疑問(wèn),或許還需要后面的學(xué)習(xí)才能搞明白了。

LinQ to SQL:這個(gè)由于只限制sql server數(shù)據(jù)庫(kù),所以目前已經(jīng)被LinQ to Entity逐漸取代。

(2)LinQ技術(shù)如何開(kāi)發(fā)實(shí)現(xiàn)?

LinQ表達(dá)式:與我們查詢(xún)數(shù)據(jù)需要編寫(xiě)SQL語(yǔ)句一樣,是使用它自然需要一個(gè)”語(yǔ)句“,就是linq表達(dá)式,而且同sql語(yǔ)句一樣也有它自己的語(yǔ)法規(guī)則。它也有與SQL語(yǔ)句中類(lèi)似的一些關(guān)鍵字:select where orderby 已經(jīng)groupby在語(yǔ)法上面也很相似。一會(huì)兒在我自己的驗(yàn)證實(shí)例中,會(huì)對(duì)這個(gè)做一個(gè)例子說(shuō)明。

LinQ表達(dá)式返回值必須是一個(gè)實(shí)現(xiàn)了IEnumerable<T>的迭代對(duì)象。

對(duì)迭代對(duì)象進(jìn)行枚舉時(shí),linq執(zhí)行它的工作。

(3)關(guān)于linQ的延遲執(zhí)行:linQ表達(dá)式中關(guān)于執(zhí)行返回的過(guò)程,書(shū)中描述的延遲執(zhí)行的特點(diǎn),只是說(shuō)了可能根據(jù)解析類(lèi)型的不同,linQ可能是一次執(zhí)行完也可以是在進(jìn)行迭代的過(guò)程中逐步執(zhí)行。但是還是對(duì)這個(gè)概念很模糊,這是我的第二個(gè)疑問(wèn),還需要深入學(xué)習(xí)的時(shí)候回顧。

(4)LinQ表達(dá)式的幾大核心特點(diǎn):為了更易于理解以下的部分將會(huì)以自己之后的程序驗(yàn)證來(lái)舉例講解其中的特點(diǎn)

我先定義了數(shù)據(jù)類(lèi):

//定義數(shù)據(jù)類(lèi)     public class mytestData {        public int studentid { set; get; }//list綁定GridView列表屬性不能為只讀否則報(bào)錯(cuò)。        public string name { set; get; }        public int age{set;get;}         public mytestData(int id, string name, int age)         {            this.studentid = id;            this.name = name;            this.age = age;         }             }

在頁(yè)面page_load中初始化測(cè)試數(shù)據(jù),原本想了想既然是查詢(xún)對(duì)象數(shù)據(jù)集合,那就定義一個(gè)ArrayList裝載自己的定義的數(shù)據(jù)類(lèi),在編寫(xiě)LinQ表達(dá)式的時(shí)候發(fā)現(xiàn)了一個(gè)問(wèn)題:

自定義的數(shù)據(jù)類(lèi)容器需要有查詢(xún)模式的實(shí)現(xiàn),所以也就是說(shuō)LinQ是支持一部分?jǐn)?shù)據(jù)類(lèi)型的查詢(xún)。。。。

什么是linq技術(shù)? 三聯(lián)

解決辦法就是采用List類(lèi)型:

  List<mytestData> mydata = new List<mytestData>();

先來(lái)看一個(gè)linq表達(dá)式的簡(jiǎn)單例子:

 protected void Page_Load(object sender, EventArgs e)         {            //定義測(cè)試驗(yàn)證數(shù)據(jù)             List<mytestData> mydata = new List<mytestData>();             mydata.Add(new mytestData(1, "george", 23));             mydata.Add(new mytestData(2, "lio", 25));             mydata.Add(new mytestData(3, "kaiwen", 20));             mydata.Add(new mytestData(4, "anna", 19));             mydata.Add(new mytestData(5, "angel", 16));             mydata.Add(new mytestData(6, "geo", 27));             mydata.Add(new mytestData(7, "demo", 30));             mydata.Add(new mytestData(8, "哈哈", 22));            //1.最簡(jiǎn)單的實(shí)現(xiàn)linq表達(dá)式             IEnumerable<mytestData> matchs;             matchs = from student in mydata  //student是查詢(xún)mydata集合中的對(duì)象的假名                      where student.age>20    //查詢(xún)過(guò)濾條件                      select student;         //查詢(xún)返回滿(mǎn)足過(guò)濾條件的matchs的集合            //頁(yè)面綁定數(shù)據(jù)展示             GridView1.DataSource = matchs;             GridView1.DataBind();         }

調(diào)試查看返回的匹配的數(shù)據(jù)類(lèi)型:

什么是linq技術(shù)?

頁(yè)面效果:

什么是linq技術(shù)?

剛才我們對(duì)LinQ表達(dá)式應(yīng)該有了初步的認(rèn)識(shí),現(xiàn)在在結(jié)合一些例子說(shuō)明linQ表達(dá)式能夠?qū)崿F(xiàn)的幾個(gè)效果: