![ITjob NET視頻教程之C教材linq_第1頁](http://file4.renrendoc.com/view11/M00/2C/09/wKhkGWWt65SAcDj7AADAEk42z8I608.jpg)
![ITjob NET視頻教程之C教材linq_第2頁](http://file4.renrendoc.com/view11/M00/2C/09/wKhkGWWt65SAcDj7AADAEk42z8I6082.jpg)
![ITjob NET視頻教程之C教材linq_第3頁](http://file4.renrendoc.com/view11/M00/2C/09/wKhkGWWt65SAcDj7AADAEk42z8I6083.jpg)
![ITjob NET視頻教程之C教材linq_第4頁](http://file4.renrendoc.com/view11/M00/2C/09/wKhkGWWt65SAcDj7AADAEk42z8I6084.jpg)
![ITjob NET視頻教程之C教材linq_第5頁](http://file4.renrendoc.com/view11/M00/2C/09/wKhkGWWt65SAcDj7AADAEk42z8I6085.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第十四章LINQ本課內(nèi)容C#3.0新功能LINQ語法的由來LINQ語法的使用LINQ表達式樹1匿名類型:〔1〕值類型varnum1=1;varnums=new[]{1,2,3,4,5};varstr="";〔2〕引用類型(類似于json的功能)varabc=new{a=1,b=2};Console.WriteLine(abc.a);C#3.0新功能2集合支持初始化varlist=newList<int>(){1,2,3,4,5};foreach(varsinqueryLowNums){Console.WriteLine(s);}C#3.0新功能3擴展類方法publicstaticclassbb{publicstaticboolOutLength(thisstringstr){if(str.Length>10)returntrue;returnfalse;}}publicclassaa{}publicstaticclassaaExtend{publicstaticvoidoutput(thisaatemp){}}//使用擴展方法
//擴展String預定義類Console.WriteLine(bb.OutLength("aa"));Console.WriteLine("aa".OutLength());//擴展自定義類aanewAa=newaa();newAa.output();C#3.0新功能4自動屬性publicclassPerson{publicstringName{get;set;}}C#3.0新功能5簡化屬性賦值varperson=newPerson{Name="張三"};Console.WriteLine(person.Name);C#3.0新功能6Lambda表達式定義的委托:delegatedoubleCal(doublea,doubleb);
采用Lambda表達式調(diào)用Calaaa=(aa1,bb1)=>aa1+bb1;Console.WriteLine(aaa(2,3));C#3.0新功能以一個一級方程式世界冠軍的例子來說明演變。見?LINQSamples?下的?LINQSamples?子工程定義了Racer類,賽車手的詳細內(nèi)容并通過Formula1的GetChampions方法得到所有的賽車手冠軍LINQ語法的由來
1、傳統(tǒng)的查詢在List<T>中定了FindAll和Sort方法用于實現(xiàn)集合中的查找與排序。見<TraditionalQuery>方法。LINQ語法的由來2、Enumerable系統(tǒng)預定義類中擴展了IEnumerable<T>的Where方法,OrderByDescending方法和Select方法。見?ExtensionMethods?方法LINQ語法的由來3、采用Lambda表達式可以替換匿名方法。見?LambdaExpressions?方法LINQ語法的由來4、LinqQuery語法最終翻譯成集合中擴展的Where方法,OrderByDescending方法和Select方法。見?LinqQuery?方法LINQ語法的由來1、一個簡單的LinqQuery查詢范例,其中where與select關鍵字解釋成List<T>的Where和Select方法。見?SimpleFiltering?方法LINQ語法的使用2、List<T>的Where方法的參數(shù)Func<T1,T2,TResult>(T1arg1,T2arg2)的第二個參數(shù)指向集合中的元素對應的索引??梢酝ㄟ^這個索引進行判斷奇偶位置。見?SimpleFilteringWithIndex?方法LINQ語法的使用3、集合和函數(shù)提供了OfType方法可以按數(shù)據(jù)類型過濾數(shù)據(jù)。見?TypeFiltering?方法LINQ語法的使用4、集合中的對象有時候包含集合或數(shù)組字段,可以對這中字段用復合的from字句來解決。見?CompoundFrom?方法LINQ語法的使用5、對于多個字段的排序順序,LINQ解釋成OrderBy、ThenBy、ThenBy見?Ordering?方法本例子還是用Take(10);方法,用于取得前10個對象。LINQ語法的使用6、LINQ支持類似于數(shù)據(jù)庫的分組的語法,與SQL的區(qū)別在于:〔1〕分組關鍵碼進入一個單獨的集合保存〔2〕通過這個單獨的集合對象再次進行類似于having的再過濾功能〔3〕最后通過一個匿名類的形式呈現(xiàn)見?Grouping?方法LINQ語法的使用7、LINQ還支持分組之后的再聚合見?GroupingWithNestedObjects?方法LINQ語法的使用8、LINQ支持兩個集合的關聯(lián),類似于SQL的join語法,表關聯(lián)的=采用equals來代替。見?Join?方法LINQ語法的使用9、LINQ還支持集合運算〔Union,Intersect,Except〕與唯一值過濾〔Distinct〕,分別對應不同的方法。見?Intersect?方法LINQ語法的使用10、LINQ支持分頁功能,采用Skip和Take方法。見?Partitioning?方法LINQ語法的使用11、LINQ支持所有的聚合函數(shù),包括Sum,Count,Min,Max,Average,Aggregate。見?QuantifiersCount()、QuantifiersSum()、GroupingAndAggregation()?方法LINQ語法的使用12、LINQ支持集合子查找功能,不是通過LINQ的Where,而是通過索引器見?Conversion?方法LINQ語法的使用13、LINQ通過Range方法生成一個序列集合,通過Empty生成一個空集合〔用于參數(shù)需要傳遞一個集合的情況下〕,通過Repeat方法生成一個重復值集合見?Range?方法LINQ語法的使用14、LINQ還可以用于非泛型集合見?NonGenericCollection?方法LINQ語法的使用見附件的一個linqtosql的例子,我們查看categorycategorySport=dataContext.category.Single(c=>=="體育要聞");中的Single方法,發(fā)現(xiàn)了Expression<Func<TSource,bool>>這樣的對象,而我們的賦值那么是一個Lambda表達式,將一個表達式賦值給一個類是怎么解釋?為什么需要了解表達式目錄樹
看下面這幅圖:為什么需要了解表達式目錄樹
我們編寫的查詢表達式,在傳遞給Expression<Func<TSource,bool>>時,首先封裝為一個表達式目錄樹,然后LINQTOSQL的Provider開始分析這個表達式目錄樹,從數(shù)據(jù)庫查找相應的數(shù)據(jù)。
表達式目錄樹〔ExpressionTree〕是一種抽象語法樹或者說它是一種數(shù)據(jù)結構,通過Lambda表達式構造一個表達式樹:Expression<Func<int,int,int>>expression=(a,b)=>a*b+2;認識表達式目錄樹
編譯器會創(chuàng)立一個表達式目錄樹,如以下圖所示:認識表達式目錄樹
每一個節(jié)點都表示一個表達式,可能是一個二元運算,也可能是一個常量或者參數(shù)等。我們也可以在VisualStudio中使用ExpressionTreeVisualizer來查看該表達式目錄樹(將附件中的ExpressionTreeVisualizer.dll復制出來到...\ProgramFiles\MicrosoftVisualStudio9.0\Common7\Packages\Debugger\Visualizers.中即可在debug中使用):認識表達式目錄樹
認識表達式目錄樹
查看結果如以下圖所示:認識表達式目錄樹
.NETFramework提供的表達式,如以下圖所示:認識表達式目錄樹
它們都繼承于抽象的基類Expression,而泛型的Expression<TDelegate>那么繼承于LambdaExpression。在Expression類中提供了大量的工廠方法,這些方法負責創(chuàng)立以上各種表達式對象,如調(diào)用Add()方法將創(chuàng)立一個表示不進行溢出檢查的算術加法運算的BinaryExpression對象,調(diào)用Lambda方法將創(chuàng)立一個表示lambda表達式的LambdaExpression對象我們可以通過這些表達式對象手工構造出一個表達式目錄樹,代碼在備注中:認識表達式目錄樹
構造的表達式目錄樹,仍然如以下圖所示:認識表達式目錄樹
運行這段代碼,輸出:認識表達式目錄樹
通過手工構造的方式,確實構造出了同前面一樣的Lambda表達式。對于一個表達式目錄樹來說,它有幾個比較重要的屬性:Body:指表達式的主體局部;Parameters:指表達式的參數(shù);NodeType:指表達式的節(jié)點類型,如在上面的例子中,它的節(jié)點類型是Lambda;Type:指表達式的靜態(tài)類型,在上面的例子中,Type為Fun<int,int,int>。在ExpressionTreeVisualizer中,我們可以看到表達式目錄樹的相關屬性,如以下圖所示:認識表達式目錄樹
認識表達式目錄樹
Func<int,int,int>lambda=(a,b)=>a+b*2;Expression<Func<int,int,int>>expression=(a,b)=>a+b*2;其中第一句直接將Lambda表達式直接賦值給了委托,相當于一個匿名方法。而第二句那么告訴編譯器是一個表達式目錄樹,所以編譯器會分析該Lambda表達式,并生成表示該Lambda表達式的表達式目錄樹,即它與我們手工創(chuàng)立表達式目錄樹是一致的。表達式目錄樹與委托
如果需要執(zhí)行表達式目錄樹。只需要調(diào)用Compile方法來創(chuàng)立一個可執(zhí)行委托即可,并且調(diào)用該委托,如備注中的代碼:執(zhí)行表達式目錄樹注意此處的Compiler方法不等同于編譯器的編譯。只能執(zhí)行表示Lambda表達式的表達式目錄樹,即LambdaExpression或者Expression<TDelegate>類型。如果表達式目錄樹不是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 淄博市巡游出租汽車駕駛員區(qū)域科目考試題庫及答案(供參考)
- 2025年河北女子職業(yè)技術學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 寄生蟲病學糞便檢查(二)
- 閱讀《金庸》小說知識競賽考試題庫
- 財產(chǎn)保險合同(2篇)
- 智慧照明控制系統(tǒng)合同(2篇)
- 2025年蘇科新版七年級歷史下冊階段測試試卷含答案
- 2025年湘師大新版選擇性必修2化學上冊月考試卷
- 2025年廣州體育職業(yè)技術學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 2025年平頂山工業(yè)職業(yè)技術學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 走新型城鎮(zhèn)化道路-實現(xiàn)湘潭城鄉(xiāng)一體化發(fā)展
- 江蘇中國中煤能源集團有限公司江蘇分公司2025屆高校畢業(yè)生第二次招聘6人筆試歷年參考題庫附帶答案詳解
- 【語文】第23課《“蛟龍”探?!氛n件 2024-2025學年統(tǒng)編版語文七年級下冊
- 北師版七年級數(shù)學下冊第二章測試題及答案
- 2025年全體員工安全意識及安全知識培訓
- 2025警察公安派出所年終總結工作匯報
- 機動車檢測站新?lián)Q版20241124質(zhì)量管理手冊
- 2024年決戰(zhàn)行測5000題言語理解與表達(培優(yōu)b卷)
- 中國游戲發(fā)展史課件
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- 工程數(shù)學試卷及答案
評論
0/150
提交評論