資源描述:
《Web程序設(shè)計(jì)——ASP.NET 第2版 教學(xué)課件 作者 陳冠軍 馬翠翠 第10章 強(qiáng)大的LINQ查詢.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、第10章強(qiáng)大的LINQ查詢LINQ語言以前曾說是替代SQL語言的一種更快捷有效的查詢語言。微軟對(duì)LINQ給予厚望,在ASP.NET的新特性中,LINQ相當(dāng)重要,可以說是重中之重,所以本書特列出一章進(jìn)行講解。認(rèn)識(shí)LINQ10.1認(rèn)識(shí)LINQtoDataSet10.3LINQtoXML10.5LINQ語法基礎(chǔ)10.2認(rèn)識(shí)LINQtoSQL10.410.1認(rèn)識(shí)LINQWebService技術(shù)允許網(wǎng)絡(luò)上的所有系統(tǒng)進(jìn)行交互,屬于跨平臺(tái)的應(yīng)用。隨著技術(shù)的發(fā)展,一個(gè)Web服務(wù)可以包含額外的指定功能,并且可以在多個(gè)B2B應(yīng)用中協(xié)作通信。LINQ帶來
2、很多開發(fā)上的便利。首先,它可以利用VS這個(gè)強(qiáng)大的IDE,來進(jìn)行SQL語句編寫時(shí),可以有智能感應(yīng)功能,這比起在SQLServer中使用用查詢分析器寫SQL語句就方便多了,同時(shí)它可以把數(shù)據(jù)當(dāng)成一個(gè)對(duì)象來操作。圖10-1LINQ的組成10.2LINQ語法基礎(chǔ)LINQ使查詢成為了.NET中一種編程概念,被查詢的數(shù)據(jù)可以是XML(LINQToXML)、Databases(LINQToSQL、LINQToDataset、LINQToEntities)和對(duì)象(LINQToObjects)。LINQ也是可擴(kuò)展的,允許建立自定義的LINQ數(shù)據(jù)提供者。
3、varreault=FromsinStudentsWheres.Name=”wangyuanfeng”Selectnew{s.Name,s.Age,s.Language};該語句等價(jià)于下面的語句:varreault=Students.Where(s=>s.Name==”wangyuanfeng”).Select(s.=>new{s.Name,.Age,s.Language});10.2.1局部變量varreault”聲明一個(gè)局部變量,它的具體類型是通過初始化表達(dá)式來推斷,這點(diǎn)是通過var關(guān)鍵詞完成的。可以寫出如下的代碼:varnum
4、=50;varstr="simplestring";10.2.2擴(kuò)展方法Where、Select”等都使用了擴(kuò)展方法,其可以擴(kuò)展一個(gè)已存在的類型,增加它的方法,而無需繼承它或者重新編譯。假設(shè)想要驗(yàn)證一個(gè)string是不是合法的Email地址,可以這樣做:publicstaticclassMyExtensions{publicstaticboolIsValidEmailAddress(thisstrings){Regexregex=newRegex(@"^[w-.]+@([w-]+.)+[w-]{2,4}$");returnregex
5、.IsMatch(s);}}以上代碼定義了一個(gè)帶有靜態(tài)方法的靜態(tài)類。注意,這個(gè)靜態(tài)方法在參數(shù)類型string前面有一個(gè)this關(guān)鍵詞,將會(huì)告訴編譯器這個(gè)特殊的擴(kuò)展方法會(huì)增加給string類型的對(duì)象。于是就可以在string中調(diào)用這個(gè)方法:usingMyExtensions;stringemail=Request.QueryString["email"];if(email.IsValidEmailAddress()){……}10.2.3Lambda表達(dá)式s=>s.Name==”wangyuanfeng”以上代碼使用了Lambda表達(dá)式
6、,它提供了一個(gè)更簡潔的語法來寫匿名方法。每一個(gè)Lambda表達(dá)式就是一個(gè)隱式類型的參數(shù)列表,然后是一個(gè)“=>”符號(hào),最后是一個(gè)表達(dá)式或者一個(gè)語句塊。使用SOAP與Web服務(wù)方法進(jìn)行通信遵循標(biāo)準(zhǔn)格式。此格式的一部分是在XML文檔中編碼的數(shù)據(jù)。XML文檔包含一個(gè)Envelope根元素,該元素又由必需的Body元素和可選的Header元素構(gòu)成。10.2.4匿名類型new{}”使用了匿名類型,為了講解匿名類型,這種語法可以定義內(nèi)嵌的類型,而不需要顯式地定義一個(gè)類型。如果沒有定義Point類,只使用一個(gè)類型是匿名的Point對(duì)象,則可以這樣編
7、寫:varp=new{a=1,b=4};10.3認(rèn)識(shí)LINQtoDataSetDataSet是ADO.NET中使用頻率最高的組件之一,但DataSet也限制了查詢功能。通過使用可用于許多其他數(shù)據(jù)源的相同查詢功能,LINQtoDataSet可將更豐富的查詢功能應(yīng)用于同DataSet的交互中。通過使用LINQtoDataSet,可以更快更容易地查詢?cè)贒ataSet對(duì)象中緩存的數(shù)據(jù)。10.3.1對(duì)DataSet對(duì)象使用LINQ查詢對(duì)DataSet對(duì)象使用LINQ查詢時(shí),并不是對(duì)自定義類型的枚舉所進(jìn)行的查詢,而是查詢DataRow對(duì)象的枚舉
8、:varquery=frompinEmployees.AsEnumerable()selectp;然后可以通過使用foreach語句來遍歷查詢后所返回的可枚舉對(duì)象:foreach(DataRowpinquery){//格式化輸出Res