![ASPNET-MVC網(wǎng)站開發(fā)從入門到實(shí)戰(zhàn)-微課視頻版課件第章-LINQ數(shù)據(jù)模型_第1頁](http://file4.renrendoc.com/view7/M02/2E/17/wKhkGWbvuAqAIKXDAADYJ6FURVQ963.jpg)
![ASPNET-MVC網(wǎng)站開發(fā)從入門到實(shí)戰(zhàn)-微課視頻版課件第章-LINQ數(shù)據(jù)模型_第2頁](http://file4.renrendoc.com/view7/M02/2E/17/wKhkGWbvuAqAIKXDAADYJ6FURVQ9632.jpg)
![ASPNET-MVC網(wǎng)站開發(fā)從入門到實(shí)戰(zhàn)-微課視頻版課件第章-LINQ數(shù)據(jù)模型_第3頁](http://file4.renrendoc.com/view7/M02/2E/17/wKhkGWbvuAqAIKXDAADYJ6FURVQ9633.jpg)
![ASPNET-MVC網(wǎng)站開發(fā)從入門到實(shí)戰(zhàn)-微課視頻版課件第章-LINQ數(shù)據(jù)模型_第4頁](http://file4.renrendoc.com/view7/M02/2E/17/wKhkGWbvuAqAIKXDAADYJ6FURVQ9634.jpg)
![ASPNET-MVC網(wǎng)站開發(fā)從入門到實(shí)戰(zhàn)-微課視頻版課件第章-LINQ數(shù)據(jù)模型_第5頁](http://file4.renrendoc.com/view7/M02/2E/17/wKhkGWbvuAqAIKXDAADYJ6FURVQ9635.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第2章LINQ數(shù)據(jù)模型ASP.NETMVC網(wǎng)站設(shè)計教程LINQ(LanguageIntegratedQuery)語言集成查詢是.NETFramework3.5中的新特性,作為一組專門用于C#和VisualBasic語言的擴(kuò)展功能,LINQ提供了一種統(tǒng)一且對稱的方式??梢允褂肅#或者Visual交互,可以在廣義的數(shù)據(jù)上獲取和操作數(shù)據(jù)。Basic編寫類似SQL的表達(dá)式實(shí)現(xiàn)與多種數(shù)據(jù)的LINQ作為一組語言特性和API,可以使用統(tǒng)一的方式編寫查詢命令,檢索并保存來自不同數(shù)據(jù)源的數(shù)據(jù),從而實(shí)現(xiàn)程序設(shè)計語言和數(shù)據(jù)庫之間的匹配,為不同類型的數(shù)據(jù)源提供統(tǒng)一的查詢接口。LINQ主要由LINQADO.NETLINQ等幾部分組成,基本架構(gòu)如圖2.1所示。toObjects、LINQtoXML、23在LINQ中可以使用相同的查詢語法來查詢和轉(zhuǎn)換XML、對象集合、SQL數(shù)據(jù)庫、ADO.NET數(shù)據(jù)集以及其他多種格式的數(shù)據(jù)對象,LINQ使用中具有如下優(yōu)點(diǎn)。(1)熟悉的語言。無需復(fù)雜的學(xué)習(xí)即可上手,不必為每種類型的數(shù)據(jù)源或數(shù)據(jù)格式學(xué)習(xí)新的語言。(2)更少的編碼。相比較傳統(tǒng)的方式LINQ減少了編寫的代碼量,編寫更少代碼即可創(chuàng)建完整應(yīng)用。(3)可讀性強(qiáng)。能夠大幅減少過程控制語句,大幅提高代碼的可讀性和可維護(hù)性,可更加輕松地理解和維護(hù)。(4)標(biāo)準(zhǔn)化的查詢方式??梢允褂孟嗤腖INQ語法查詢多個數(shù)據(jù)源,無需更多的編程技巧即可合并數(shù)據(jù)源。(5)有效的類型檢查。具有編譯類型檢查,提高了開發(fā)的時效性和準(zhǔn)確性。(6)方便的智能提示。提供了通用集合的智能感知提示。42.2.1隱式類型var隱式類型var是從VisualC#3.0開始的一種新技術(shù),可以在方法內(nèi)聲明變量。如果程序設(shè)計時無法確定變量的類型,就可以使用var類型。var可代替C#中任何類型,編譯器會根據(jù)上下文來判斷該變量的類型。使用var定義變量既具有object定義的便捷性,又具強(qiáng)類型定義的效率。var類型定義變量的語法如下。var變量名=初始值;5自動屬性(Auto-ImplementedProperties)是VisualC#5.0之后新增的語法。與java語言在類的內(nèi)部中使用GetXXX()和SetXXX()方法進(jìn)行數(shù)據(jù)的讀取不同,微軟官方的規(guī)范中推薦使用C#中的公有屬性來封裝私有數(shù)據(jù)字段,通過屬性實(shí)現(xiàn)數(shù)據(jù)的讀取。如果某一屬性的set和get訪問器中沒有任何邏輯處理,只是單純的封裝字段,就可以使用自動實(shí)現(xiàn)的屬性。自動屬性的定義類似于字段,除了數(shù)據(jù)類型以外,只需再聲明其具有的訪問器即可。其封裝的私有化字段不需要單獨(dú)聲明,編譯器會自動創(chuàng)建。創(chuàng)建自動屬性語法結(jié)構(gòu)如下。class類名{public數(shù)據(jù)類型屬性1{get;set;}public數(shù)據(jù)類型屬性2{get;privateset;}//只讀屬性public數(shù)據(jù)類型屬性3{privateget;set;}//只讀屬性}//可讀寫屬性6對象和集合初始化器(ObjectandCollectionInitializers)是VisualC#3.0之后新增的語法,在創(chuàng)建對象時可以通過對象初始化器實(shí)現(xiàn)屬性的初始化。與類中構(gòu)造函數(shù)的先聲明后調(diào)用不同,初始化器不需要聲明,可以在構(gòu)造函數(shù)體內(nèi)直接為對象或集合中的成員賦值。對象和集合初始化器的語法結(jié)構(gòu)如下。類名對象=new類名(){屬性1=屬性值1,屬性1=屬性值2,屬性1=屬性值3,...};7擴(kuò)展方法(ExtensionMethod)是VisualC#3.0語言中新增的一個與LINQ密切相關(guān)的功能,通過擴(kuò)展方法可以輕而易舉地為某個框架或第三方庫中的某個類型增加輔助功能。前期版本對于.NET程序集中已編譯的類型,開發(fā)者是不能直接修改的。如果需要為某個類型添加、修改、刪除成員,唯一辦法就是重新修改類型定義的代碼。而擴(kuò)展方法允許在不修改定義的情況下向已有類型中添加方法,這種“添加”無需為原始類型創(chuàng)建新的派生類型、也無需對原始類型重新編譯。創(chuàng)建和調(diào)用擴(kuò)展方法的基本步驟如下。(1)創(chuàng)建一個靜態(tài)類;(2)在該靜態(tài)類中創(chuàng)建一個靜態(tài)方法;(3)為該靜態(tài)方法添加至少一個參數(shù),在第一個參數(shù)類型之前加上this關(guān)鍵字,該方法將成為第一個參數(shù)所屬類型的擴(kuò)展方法;(4)使用類型的對象直接調(diào)用該擴(kuò)展方法。8Lambda表達(dá)式(LambdaExpression)是一個匿名函數(shù),即沒有函數(shù)名的函數(shù)。基于數(shù)學(xué)中的λ運(yùn)算得名,直接對應(yīng)于其中的lambda抽象(Lambda入與委托類型的使用密切相關(guān)的,本質(zhì)上Lambda表達(dá)式就是用更簡單的方式來書寫匿名方法,從而簡化.NET委托類型的使用。Abstraction)。Lambda表達(dá)式的引C#中的Lambda表達(dá)式使用Lambda運(yùn)算符“=>”表示,該運(yùn)算符讀為“goesto”,運(yùn)算符將表達(dá)式分為兩部分,左邊是輸入的參數(shù),右邊是表達(dá)式的主體。Lambda表達(dá)式的語法結(jié)構(gòu)如下。(參數(shù)列表)=>{表達(dá)式或者語句塊}91.如果參數(shù)列表中只有一個未顯式聲明類型的參數(shù),可直接書寫。如果參數(shù)列表包含參數(shù)的約束0個或者兩個及兩個以上參數(shù),則參數(shù)必須使用括號括起來,示例如下。x=>x+1//單個參數(shù)可省略()(intx)=>x+1(x,y)=>x*y()=>Console.WriteLine()2.如果返回值的約束“語句或語句塊”有返回值,并且包含兩條或兩條以上語句時,必須以return語句作為結(jié)尾;如果只有一條語句,則可直接書寫表達(dá)式省略x=>x+1return//語句,示例如下。只有一條語句,直接寫表達(dá)式x=>{returnx+1;}寫返回值(intx,inty)=>{x++;y+=2;returnx+y;}//多條語句,寫返回值輸出////顯式聲明類型,多個參數(shù),需用()需用括起來()括起來//沒有參數(shù),需用()括起來//只有一條語句,可以102.3.1實(shí)體數(shù)據(jù)庫的建立表3.1student表字段名sno字段描述學(xué)號數(shù)據(jù)類型int主鍵是約束snamesex姓名性別年齡部門varchar(20)char(3)varchar(20)uintnotnulldeptage表3.2course表主鍵是字段名cno字段描述課程號數(shù)據(jù)類型int約束ctnamename教師姓名課程名varchar(20)varchar(20)notnullnotnullcredit學(xué)分uint表3.3sc表字段名sno字段描述學(xué)號數(shù)據(jù)類型int主鍵是約束外鍵gradecno課程號成績intintnotnull外鍵11LINQtoSQL是LINQ中的一個數(shù)據(jù)庫訪問的應(yīng)用框架,作為一種針對SQLServer數(shù)據(jù)庫是集成查詢語言。LINQto以對象形式管理關(guān)系數(shù)據(jù),提供了豐富的查詢功能。能夠使對Microsoft工書寫代碼、運(yùn)行時報錯誤、回頭差錯修改SQL語句的開發(fā)流程改變,通過系統(tǒng)輔助生成查詢語句,只要代碼編譯通過就能生成正確的SQL語句。SQLSQLServer的訪問代碼變得簡潔,改變傳統(tǒng)的手LINQtoSQL有查詢表達(dá)式語法(QueryExpression)和方法語法(FluentSyntax)兩種語法可供選擇。121.查詢表達(dá)式語法查詢表達(dá)式語法是一種接近于SQL語法的查詢方式,LINQtoSQL查詢表達(dá)式語法如下。var結(jié)果集=fromcin數(shù)據(jù)源where過濾表達(dá)式orderby排序selectc注:(1)查詢表達(dá)式語法與SQL語法相同。(2)查詢表達(dá)式必須以from子句開頭,以select或groupby子句結(jié)束。(3)可以使用過濾、連接、分組、排序等運(yùn)算符進(jìn)行篩選操作,構(gòu)造查找結(jié)果。(4)可以用隱式var類型變量保存查詢的結(jié)果。13////顯式聲明類型,多個參數(shù),需用()需用括起來()括起來對于LINQtoSQL語法C#中的Lambda表達(dá)式使用詢命令,檢索并保存來自不同數(shù)據(jù)源的數(shù)據(jù),從而實(shí)現(xiàn)程序設(shè)如果某一屬性的set和get訪問器中沒有任何邏輯處//只有一條語句,可以varchar(20)varchar(20)基于數(shù)學(xué)中的λ運(yùn)算得名,直接對應(yīng)于其創(chuàng)建自動屬性語法結(jié)構(gòu)如下。寫返回值(intx,inty)=>{x++;y+=2;returnx+y;}//多條語句,寫返回值輸出法,Lambda表達(dá)式等進(jìn)行了詳細(xì)講解;SetXXX()方法進(jìn)行數(shù)據(jù)的讀取不同,微軟官方的規(guī)范中推薦Enumerable類SetXXX()方法進(jìn)行數(shù)據(jù)的讀取不同,微軟官方的規(guī)范中推薦與java語言在類的內(nèi)部中使用GetXXX()和2.查詢方法語法方法語法也稱為流利語法,利用System.Linq.Enumerable類中定義的擴(kuò)展方法和Lambda表達(dá)式進(jìn)行查詢,類似于調(diào)用類的擴(kuò)展方法,語法結(jié)構(gòu)如下。IEnumerabl<T>query=數(shù)據(jù)源集合.Where(bool類型的過濾表達(dá)式).OrderBy(排序條件).Select(選擇條件)143.查詢表達(dá)式語法與方法語法比較查詢表達(dá)式語法與方法語法存在著緊密的關(guān)系,比較如下。(1)CLR本身并不理解查詢表達(dá)式語法,其只理解方法語法。(2)編譯器負(fù)責(zé)在編譯時將查詢表達(dá)式語法翻譯為方法語法。(3)大部分方法語法都有與之對應(yīng)的查詢表達(dá)式語法形式:如Select()對應(yīng)select、OrderBy()對應(yīng)orderby等。(4)有部分查詢方法在C#中目前還沒有對應(yīng)的查詢語句,如Count()和Max()等,此時需要使用查詢表達(dá)式語法和方法語法的混合方式進(jìn)行替代。15【例2-9】創(chuàng)建控制臺應(yīng)用程序,使用LINQ創(chuàng)建模型,使用LINQ查詢語句和基于Lambda表達(dá)式查詢方法分別實(shí)現(xiàn)按年齡進(jìn)行學(xué)生姓名查詢。16【例2-10】創(chuàng)建控制臺應(yīng)用程序,使用LINQ創(chuàng)建模型,使用Lambda表達(dá)式分別實(shí)現(xiàn)學(xué)生信息的插入操作。17【例2-11】創(chuàng)建控制臺應(yīng)用程序,使用LINQ創(chuàng)建模型,使用Lambda表達(dá)式分別實(shí)現(xiàn)學(xué)生信息的修改操作。18【例2-12】創(chuàng)建控制臺應(yīng)用程序,使用LINQ創(chuàng)建模型,使用基于Lambda表達(dá)式的查詢方法實(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房地產(chǎn)項(xiàng)目資金代管代收代付服務(wù)合同
- 2025年度離婚夫妻共同子女法律權(quán)益保護(hù)協(xié)議
- 施工總體籌劃
- 施工日志填寫樣本施工過程中的質(zhì)量問題與整改記錄
- 打造高效、智能的辦公環(huán)境-基于工業(yè)互聯(lián)網(wǎng)平臺的實(shí)踐研究
- 深度探討學(xué)術(shù)研究匯報的要點(diǎn)與制作技巧
- 業(yè)績達(dá)標(biāo)股票期權(quán)合同范本
- 產(chǎn)品分銷合作合同書
- 萬科地產(chǎn)集團(tuán):合同管理新篇章
- 二手房交易合同樣本
- cnc加工崗前培訓(xùn)
- 2024年海南省公務(wù)員錄用考試《行測》真題卷及答案解析
- 2025年中國汽車車燈行業(yè)市場現(xiàn)狀、前景分析研究報告(智研咨詢發(fā)布)
- 2024夏季廣東廣州期貨交易所招聘高頻難、易錯點(diǎn)500題模擬試題附帶答案詳解
- 浙江省2024年高考化學(xué)模擬試題(含答案)2
- 2024新人教七年級英語上冊 Unit 2 Were Family!(大單元教學(xué)設(shè)計)
- (部編版)統(tǒng)編版小學(xué)語文教材目錄(一至六年級上冊下冊齊全)
- 材料力學(xué)之材料疲勞分析算法:S-N曲線法:疲勞分析案例研究與項(xiàng)目實(shí)踐.Tex.header
- 2024(新高考2卷)英語試題詳解解析 課件
- 天津2024年天津市規(guī)劃和自然資源局所屬事業(yè)單位招聘筆試歷年典型考題及考點(diǎn)附答案解析
- 中國醫(yī)美行業(yè)2024年度洞悉報告-德勤x艾爾建-202406
評論
0/150
提交評論