編程專題講座開發(fā)技術(shù)第30章wpf框架_第1頁(yè)
編程專題講座開發(fā)技術(shù)第30章wpf框架_第2頁(yè)
編程專題講座開發(fā)技術(shù)第30章wpf框架_第3頁(yè)
編程專題講座開發(fā)技術(shù)第30章wpf框架_第4頁(yè)
編程專題講座開發(fā)技術(shù)第30章wpf框架_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

LanguageIntegratedQueryLINQ,是微軟在新一代的框架體系中提供的一種語(yǔ)言LINQ查詢功能,開發(fā)人員可以在對(duì)象領(lǐng)域和數(shù)據(jù)領(lǐng)域建立起詢。本章將從LINQ的概述、語(yǔ)法、應(yīng)用以及最終的應(yīng)用場(chǎng)景來(lái)介紹LINQ技術(shù)。LINQ查詢是通過(guò)查詢表達(dá)式完成對(duì)數(shù)據(jù)源的數(shù)據(jù)檢索功能,在.NET3.5LINQ通過(guò)提供一種跨各種數(shù)據(jù)源和數(shù)據(jù)格式使用數(shù)據(jù)的一致模型,使得在框架中進(jìn)LINQ查詢中,始終會(huì)用到對(duì)象。可以使用相同的基本編碼模XML文檔、SQL數(shù)據(jù)庫(kù)、ADO.NET數(shù)據(jù)集、.NET集合中的數(shù)據(jù)以及對(duì)其有LINQ提供程序可用的任何其他格式的數(shù)據(jù)。LINQ查詢語(yǔ)法,定義本次查詢的內(nèi)容。除了查詢數(shù)據(jù)執(zhí)行查詢是指最終的查詢語(yǔ)句的運(yùn)行。查詢變量本身只是查詢命令,實(shí)際的查詢執(zhí)行會(huì)延遲在查詢執(zhí)行語(yǔ)句中循環(huán)查詢變量時(shí)發(fā)生。由于查詢變量本身從不保存查詢據(jù)庫(kù)。在應(yīng)用程序中,可以創(chuàng)建一個(gè)檢索數(shù)據(jù)的查詢,并可以按某一時(shí)間間隔反復(fù)執(zhí)LINQ查詢是一種通用的查詢語(yǔ)法,它可以在程序的任意邏輯中使用。本節(jié)將通過(guò)一個(gè)控制臺(tái)應(yīng)用程序來(lái)實(shí)現(xiàn)LINQ查詢的應(yīng)用介紹。staticstaticvoidMain(string[]{int[]numbers=newint[7]{0,1,2,3,4,5,6varnumQueryfromnuminnumbers//指定查詢對(duì)象wherenum2)0//指定查詢條件selectnum;//選擇查詢結(jié)果foreach(intnumin{Console.Write("{0,1num);}}在上面的代碼中,首先定義了一個(gè)整型的數(shù)組對(duì)象numbers,以此作為數(shù)據(jù)源進(jìn)行后句后續(xù)定義了一個(gè)查詢臨時(shí)變量,用于定義數(shù)據(jù)源中的查詢臨時(shí)數(shù)據(jù)。in語(yǔ)句指定了查詢變量查詢變量對(duì)象numQuery,執(zhí)行查詢,將符合條件的查詢結(jié)果顯示到控制臺(tái)中。30.1LINQ礎(chǔ)上。借助于LINQ,查詢已是高級(jí)語(yǔ)言構(gòu)造,就如同類、方法、等。對(duì)于編寫查詢的開發(fā)人員來(lái)說(shuō),LINQ最重要的部分是查詢表達(dá)式。查詢表達(dá)式是使SQL數(shù)據(jù)庫(kù)、ADO.NET數(shù)據(jù)集、XML文檔和流以及.NET集合中的數(shù)據(jù)。C#SQLXQuery關(guān)鍵字使join或group子句的結(jié)果能夠充當(dāng)同一查詢表達(dá)式中附加查詢子句的LINQ查詢的一項(xiàng)規(guī)則,建議盡量使用查詢語(yǔ)法,只在必需的情況下才一個(gè)排序子句,但不對(duì)源元素進(jìn)行轉(zhuǎn)換,select子句結(jié)束了該查詢。int[]scores={90,71,82,93,75,82IEnumerable<intscoreQuery fromscoreinscoreswherescore>60fromscoreinscoreswherescore>60orderbyscoredescendingselectforeach(inttestin{ }foreachToList方法進(jìn)行轉(zhuǎn)換,IEnumerable<City>IEnumerable<City>largeCityList(fromcountryincountries fromcityincountry.Cities wherecity.Population>10000 selectcity) 詢前面的所有分?jǐn)?shù)中的最高得分,可以通過(guò)Max方法來(lái)獲取到,代碼如下:intinthighestScore(fromscoreinscoresselectscore)Selectgroupby語(yǔ)句實(shí)現(xiàn)對(duì)結(jié)果進(jìn)行分組。varvarqueryCountryGroupsfromcountryincountries groupcountrybycountry.Name[0];//分組查詢結(jié)果orderby語(yǔ)句,并且結(jié)合正序或者倒fromcountryincountries//指定查詢對(duì)象orderbycountry.Area>500000,//指定查詢條件country.Populationdescending//查詢結(jié)果排序select varvarcategoryQueryfromcatincategories joinprodinproductsoncatequalsprod.Category//聯(lián)合查詢selectnew{Category=cat,Name=prod.Name}; string[]names={"firstNamelastName"};IEnumerable<string>queryFirstNames=fromnameinletfirstName=name.Split(newchar[]{''})[0]selectfirstName;

LINQ的查詢包括兩種基本的語(yǔ)法,即查詢語(yǔ)法和方法語(yǔ)法。查詢語(yǔ)法是指在查詢中select語(yǔ)句直接返回查詢列表,而方法語(yǔ)法是對(duì)于查詢結(jié)果的一些統(tǒng)計(jì)功能,如求和SumMaxMinAverage等。在查詢中,二者可以分別獨(dú)30.2.1節(jié)中介紹了查詢語(yǔ)法和方法語(yǔ)法的一些使用方式。本節(jié)將通過(guò)一個(gè)完整的實(shí)例介紹如何使用查詢語(yǔ)法和方法語(yǔ)法進(jìn)行LINQ的查詢。fromnuminnumbers//指定查詢對(duì)象wherenum<3||num>7//指定查詢條件select ine("查詢1結(jié)果:");foreachintintTempinfilteringQuery){ }//2,定義查詢條件IEnumerable<intorderingQueryfromnuminnumbers wherenum<3||num> orderbynum selectselect foreach(intintTempin{ }string[] Query={"apple","banana","orange","strawberry"fromitemingrou<char,string>>queryFoodGroupsgroupitemby ine("3結(jié)果:foreach <char,string>miin 31個(gè)查詢表達(dá)式演示如何where73的所有23個(gè)表達(dá)式演示如何按照鍵對(duì)結(jié)17,12,10doubleaverage=);//IEnumerable<intconcatenationQuerynumbers1.Concat(numbers2); ine("查詢5結(jié)果:");foreach(intintTempin{ } foreach(intintTempin{ }34Average方法獲取數(shù)據(jù)源lambda表達(dá)式進(jìn)行查詢。intnumCount1=(fromnuminnumbers1wherenum<3||num>7selectnum).Count();IEnumerable<int>numbersQuery=fromnuminnumbers1wherenum<3||num>7selectnum;intnumCount2=7屬于查詢語(yǔ)法和方法語(yǔ)法的混合查詢。Count使用的是方select37的數(shù)據(jù)30.2使用LINQ通過(guò)實(shí)例介紹如何通過(guò)LINQ實(shí)現(xiàn)數(shù)據(jù)的合并。classclass{publicstringName{get;set;publicintID{get;set;}class{publicstringName{get;set;publicintID{get;set;}創(chuàng)建第一個(gè)數(shù)據(jù)源List<A>a=new{newAnewA{ID=2,newA{ID=3,newA{ID=4,List<B>b=new{newB{ID=1,Name="Mary"},newB{ID=2,Name="Jane"},newB{ID=3,Name="Kate"}SameID=AinA.ID1Binb foreach{}30.3LINQ使用LINQLINQ不僅可以查詢數(shù)據(jù),修改查詢結(jié)果,而且可以用來(lái)完成查詢之后的數(shù)據(jù)轉(zhuǎn)換功XML格式的數(shù)據(jù)。本節(jié)將通過(guò)一個(gè)實(shí)例來(lái)介紹如何實(shí)現(xiàn)LINQ對(duì)數(shù)據(jù)的轉(zhuǎn)換。classclass{publicstringName{get;set;publicintID{get;set;publicList<int>}List<A>List<A>a=new{newA{ID=1,Name="Mary",Phones=newList<int>{1111,2222,newA{ID=2,Name="Jane",Phones=newList<int>{4444,5555,newA{ID=3,Name="Kate",Phones=newList<int>{7777,8888,添加如下用于LINQ轉(zhuǎn)換的代碼:varAsToXML=newXElement("Root", Ainaletx= selectnewXElement("A",newnew//IDnewXElement("Phones",//創(chuàng)建Phonesa結(jié)束 30.4LINQLINQ定義了查詢語(yǔ)言,它可以通過(guò)對(duì)多種數(shù)據(jù)源對(duì)象進(jìn)行查詢,從而實(shí)現(xiàn)數(shù)據(jù)的高以下4種數(shù)據(jù)源查詢的介紹,使讀者可以更深入的了解LINQ在簡(jiǎn)單對(duì)象模型中查詢的LINQToSQLLINQtoSQL中,關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)模型映射到用開發(fā)人員所用的編程語(yǔ)言表示的然后將它們發(fā)送到數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行。當(dāng)數(shù)據(jù)庫(kù)返回結(jié)果時(shí),LINQtoSQL會(huì)將它們轉(zhuǎn)換回編程語(yǔ)言處理的對(duì)象。本節(jié)通過(guò)一個(gè)實(shí)例來(lái)介紹如何通過(guò)LINQtoSQL實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的查詢。其中的descending參數(shù)表示為倒序排列結(jié)果。注意:SQLServerExpress程序。在“解決方案資源管理器”窗口中,右鍵單擊LINQSqlDemo項(xiàng)目節(jié)點(diǎn),單擊30.5DemoDataBase.mdf數(shù)據(jù)庫(kù)文件,以此30.5DemoDataBase.mdf文件,VisualStudio2008會(huì)彈出30.6所示。在彈出的創(chuàng)建數(shù)據(jù)表窗口中,分別添加ID、Name和 其中ID列為主鍵。創(chuàng)建完畢的數(shù)據(jù)表定義如圖30.7所示。圖30.6添加數(shù)據(jù)庫(kù)新 圖30.7定義數(shù)據(jù)庫(kù)新單擊菜單欄的“保存”按鈕,在彈出的“選擇名稱”框中,輸入表的名稱菜單。在彈出的表內(nèi)容中,輸入實(shí)例數(shù)據(jù),數(shù)據(jù)內(nèi)容如表30.1所示。30.1DemoTable1234567[Table(Name[Table(Name="DemoTable")]publicclass{privateint[Column(Name="ID")]publicintID{ {return}類,并使用了屬性[Table(Name="DemoTable")]{this._ID=}}privatestring[Column(Name="Name")]publicstringName{ {return}{this._Name=}}privatebool [Column(Name=" publicbool{ {return } { =}}}33個(gè)公有屬性。每個(gè)公有屬性都通過(guò)[Column(Name="××")]的語(yǔ)法進(jìn)行標(biāo)注,表明該屬性對(duì)應(yīng)的是數(shù)據(jù)表的某staticstaticvoidMain(string[]{ ontextdb=new>s=db.Log= >custQuery=.;s==foreach({ine("共查詢{0}個(gè)結(jié)果", custin }}注意:DemoDataBase.mdf文件的路徑應(yīng)隨著文件所在的不同而有所區(qū)別,本實(shí)例中的路徑為運(yùn)行實(shí)例時(shí)mdf文件所在的。代碼中,首先通過(guò)Dontext類定義了一個(gè)用于數(shù)據(jù)庫(kù)連接的實(shí)例,然后通過(guò)查詢語(yǔ)法構(gòu)建查詢表達(dá)式,最后通過(guò)foreach遍歷查詢的結(jié)果。30.8LINQToSQLLINQToDataSetLINQtoDataSetDataSet對(duì)象中緩存的數(shù)據(jù),使開發(fā)人員能夠使用編程語(yǔ)言本身而不是通過(guò)使用單獨(dú)的查詢語(yǔ)言來(lái)編寫查詢,因?yàn)長(zhǎng)INQtoDataSet可以簡(jiǎn)化查詢。LINQtoDataSet也可用于查詢從一個(gè)或多個(gè)數(shù)據(jù)源合并的數(shù)據(jù)?,F(xiàn)LINQtoDataSet應(yīng)用。privatestaticDataSet{DataSetret=newDataSet();DataTabledataTable=newDataTable();dataTable.Columns.Add(newDdataTable.Columns.Add(newDfor(int{olumn("Name",",DataRownewRowdataTable.NewRownewRow["ID"]=n; //添加ID值newRow["NameName"+n.ToString();//Name值"]=值"]=}return }getDataSet方法用于在內(nèi)存中構(gòu)建一個(gè)數(shù)據(jù)集對(duì)象,然后在該數(shù)據(jù)集中添加一個(gè)數(shù)據(jù)表,同時(shí)在表中添加10行數(shù)據(jù),用于后續(xù)查詢操作。staticstaticvoidMain(string[]{DataSetds=varquery=s=true//selectnew//{IDName=foreach(varitemin{ine("ID:{0}Name:: }}where查詢條件子句中,對(duì)列進(jìn)行條件查詢,同時(shí)通過(guò)Select語(yǔ)句,將查詢結(jié)果創(chuàng)建到一個(gè)對(duì)象查詢變量中,然后通過(guò)foreach語(yǔ)句,執(zhí)行該LINQ查詢。30.9LINQToDataSetLINQToXML在很多環(huán)境中,XML已廣泛采用為格式化數(shù)據(jù)的方式。在Web上,在配置文件、OfficeWordXML。LINQtoXML經(jīng)過(guò)了重新設(shè)計(jì),是的XML編程方法。它提供文檔對(duì)象模型的內(nèi)存文檔修改功能,支持LINQ查該XML文件的內(nèi)容如下代碼所示。 staticstaticvoidMain(string[]{XElementroot=IEnumerable<decimal>IEnumerable<decimal>pricesfromelin select foreach(decimalelin }對(duì)XML文件中的Price元素進(jìn)行排序,并將查詢結(jié)果顯示到控制臺(tái)中。30.10LINQToXMLLINQToObjectLINQtoObjects是指直接對(duì)任意IEnumerable集合使用LINQ查詢,無(wú)須使用中間LINQ該集合可以是用戶定義的集合,也可以是.NETFrameworkAPI返回的集合。publicpublicclass{publicstringFirstNa

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論