基于ASP-NET的Web應用開發(fā)單元9任務2:使用LINQ查詢數(shù)據(jù)庫_第1頁
基于ASP-NET的Web應用開發(fā)單元9任務2:使用LINQ查詢數(shù)據(jù)庫_第2頁
基于ASP-NET的Web應用開發(fā)單元9任務2:使用LINQ查詢數(shù)據(jù)庫_第3頁
基于ASP-NET的Web應用開發(fā)單元9任務2:使用LINQ查詢數(shù)據(jù)庫_第4頁
基于ASP-NET的Web應用開發(fā)單元9任務2:使用LINQ查詢數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

WEB應用開發(fā)單元9:使用LINQ技術訪問數(shù)據(jù)庫任務2:使用LINQ查詢數(shù)據(jù)庫主要內(nèi)容LINQ查詢語法概述1From查詢子句2Where條件子句3Select選擇子句4Group分組子句5Orderby排序子句6學習目標知識目標了解Linq查詢語法基本結(jié)構(gòu)掌握Linq查詢from子句的用法掌握Linq查詢where子句的用法掌握Linq查詢select子句的用法掌握Linq查詢group子句的用法掌握Linq查詢orderby子句的用法能力目標能夠使用LINQ技術查詢數(shù)據(jù)庫中的數(shù)據(jù)技術應用背景經(jīng)過了最近20年,面向?qū)ο缶幊碳夹g在工業(yè)領域的應用已經(jīng)進入了一個穩(wěn)定的發(fā)展階段。程序員現(xiàn)在都已經(jīng)認同像類(classes)、對象(objects)、方法(methods)這樣的語言特性。考察現(xiàn)在和下一代的技術,一個新的編程技術的重大挑戰(zhàn)開始呈現(xiàn)出來,即面向?qū)ο蠹夹g誕生以來并沒有解決降低訪問和整合信息數(shù)據(jù)的復雜度的問題。其中兩個最主要訪問的數(shù)據(jù)源與數(shù)據(jù)庫和XML相關。LINQ提供了一條更常規(guī)的途徑即給.NetFramework添加一些可以應用于所有信息源的具有多種用途的語法查詢特性,這是比向開發(fā)語言和運行時添加一些關系數(shù)據(jù)特性或者類似XML特性更好的方式。一、任務2:使用LINQ查詢語句查詢數(shù)據(jù)庫任務描述:使用LINQ

查詢語句查詢上一個單元建立的Linqdb數(shù)據(jù)庫中UserInfo表的UserName長度大于5且ID小于10的用戶信息,并使用GridView控件顯示符合條件的記錄信息。運行效果如下:二、基本知識與技能—LINQ查詢語法概述

LINQ查詢語句能夠?qū)碗s的查詢應用簡化成一個簡單的查詢語句,不僅如此,LINQ還支持編程語言本有的特性進行高效的數(shù)據(jù)訪問和篩選。雖然LINQ在寫法上和SQL語句十分相似,但是LINQ語句在其查詢語法上和SQL語句還是有出入的,SQL查詢語句如下所示。

select*fromstudent,classwherestudent.c_id=class.c_id//SQL查詢語句

varmylq=fromlinlq.Studentfromclinlq.Classwherel.C_ID==cl.C_IDselectl;//LINQ查詢語句

上述代碼是SQL查詢語句,對于LINQ而言,其查詢語句格式如下所示。上述代碼作為LINQ查詢語句實現(xiàn)了同SQL查詢語句一樣的效果,但是LINQ查詢語句在格式上與SQL語句不同,LINQ的基本格式如下所示。

var<變量>=from<項目>in<數(shù)據(jù)源>where<表達式>orderby<表達式>select<項目>二、基本知識與技能—LINQ查詢語法概述LINQ語句不僅能夠支持對數(shù)據(jù)源的查詢和篩選,同SQL語句一樣,還支持ORDERBY等排序,以及投影等操作,示例查詢語句如下所示。

varst=fromsininterwheres==3selects;//LINQ查詢

varst=fromsininterwhere(s*s)%2==0orderbysdescendingselects;//LINQ條件查詢從結(jié)構(gòu)上來看,LINQ查詢語句同SQL查詢語句中比較大的區(qū)別就在于SQL查詢語句中的SELECT關鍵字在語句的前面,而在LINQ查詢語句中SELECT關鍵字在語句的后面,在其他地方?jīng)]有太大的區(qū)別,對于熟悉SQL查詢語句的人來說非常容易上手。二、基本知識與技能—from查詢子句

from子句是LINQ查詢語句中最基本也是最關鍵的子句關鍵字,與SQL查詢語句不同的是,from關鍵字必須在LINQ查詢語句的開始。后面跟隨著項目名稱和數(shù)據(jù)源,示例代碼如下所示。

varlinqstr=fromlqinstrselectlq; //form子句from語句指定項目名稱和數(shù)據(jù)源,并且指定需要查詢的內(nèi)容,其中項目名稱作為數(shù)據(jù)源的一部分而存在,用于表示和描述數(shù)據(jù)源中的每個元素,而數(shù)據(jù)源可以是數(shù)組、集合、數(shù)據(jù)庫甚至是XML。值得一提的是,from子句的數(shù)據(jù)源的類型必須為IEnumerable、IEnumerable<T>類型或者是IEnumerable、IEnumerable<T>的派生類,否則from不能夠支持LINQ查詢語句。二、基本知識與技能—from查詢子句

protectedvoidPage_Load(objectsender,EventArgse){List<string>MyList=newList<string>();//創(chuàng)建一個列表項MyList.Add("北京");//添加一項MyList.Add("天津");//添加一項MyList.Add("上海");//添加一項varlinqstr=fromsinMyListselects;//LINQ查詢

foreach(varelementinlinqstr)//遍括歷集合{Response.Write(element.ToString()+"<br/>");//輸出對象}}在.NETFramework中泛型編程中,List(可通過索引的強類型列表)也能夠支持LINQ查詢語句的from關鍵字,因為List實現(xiàn)了IEnumerable、IEnumerable<T>類型,在LINQ中可以對List類進行查詢,示例代碼如下所示。Sample9-2-1二、基本知識與技能—from查詢子句運行結(jié)果二、基本知識與技能—where條件子句

LINQ查詢語句可以包含一個或多個where子句,而where子句可以包含一個或多個布爾值變量,為了查詢數(shù)據(jù)源中字符的長度在6之上的單詞,可以使用where子句進行查詢,示例代碼如下所示。

varlinqstr=fromdinMyListwhered.Length>5selectd在SQL查詢語句中可以使用where子句進行數(shù)據(jù)的篩選,在LINQ中同樣包括where子句進行數(shù)據(jù)源中數(shù)據(jù)的篩選。where子句指定了篩選的條件,這也就是說在where子句中的代碼段必須返回布爾值才能夠進行數(shù)據(jù)源的篩選,示例代碼如下所示。二、基本知識與技能—where條件子句

protectedvoidPage_Load(objectsender,EventArgse){List<string>MyList=newList<string>();//創(chuàng)建一個列表項MyList.Add("HelloWord!");//添加一項MyList.Add("Hi");//添加一項MyList.Add("HowDoYouDo?");//添加一項MyList.Add("Thank");//添加一項varlinqstr=fromsinMyListwheres.Length>6selects;

//執(zhí)行where查詢

foreach(varelementinlinqstr)//遍歷集合{Response.Write(element.ToString()+"<br/>");//輸出對象}}Sample9-2-2二、基本知識與技能—where條件子句運行結(jié)果二、基本知識與技能—select選擇子句

select子句同from子句一樣,是LINQ查詢語句中必不可少的關鍵字,select子句在LINQ查詢語句中是必須的,示例代碼如下所示。

varlinqstr=fromlqinstrselectlq;

上述代碼中包括三個變量,這三個變量分別為linqstr、lq、str。其中str是數(shù)據(jù)源,linqstr是數(shù)據(jù)源中滿足查詢條件的集合,而lq也是一個集合,這個集合來自數(shù)據(jù)源。在LINQ查詢語句中必須包含select子句,若不包含select子句則系統(tǒng)會拋出異常(除特殊情況外)。select語句指定了返回到集合變量中的元素是來自哪個數(shù)據(jù)源的,示例代碼如下所示。二、基本知識與技能—select選擇子句

protectedvoidPage_Load(objectsender,EventArgse){List<string>MyList=newList<string>();//創(chuàng)建ListMyList.Add("Jack"); //添加一項

MyList.Add("WhiteDoson");//添加一項

MyList.Add("Tred"); //添加一項

List<string>MyList2=newList<string>();//創(chuàng)建ListMyList2.Add("Jack'sphone"); //添加一項

MyList2.Add("WhiteDoson'sphone");//添加一項

MyList2.Add("Tom'sphone"); //添加一項

varlinqstr=fromlinMyListfromminMyList2wherem.Contains(l)selectl; //selectl變量

foreach(varelementinlinqstr) //遍歷集合

{Response.Write(element.ToString()+"<br/>");

//輸出集合內(nèi)容

}}Sample9-2-3二、基本知識與技能—select選擇子句上述代碼創(chuàng)建了兩個數(shù)據(jù)源,其中一個數(shù)據(jù)源存放了聯(lián)系人的姓名的拼音名稱,另一個則存放了聯(lián)系人的電話信息。使用from子句嵌套可以查詢出在數(shù)據(jù)源中“聯(lián)系人”和“聯(lián)系人電話”都存在并且匹配的數(shù)據(jù)。運行結(jié)果為:二、基本知識與技能—select選擇子句如果將select子句后面的項目名稱更改,則結(jié)果可能不同,更改LINQ查詢子句代碼如下所示。varlinqstr=fromdinMyListfromminMyList2wherem.Contains(d)selectm;

上述LINQ查詢子句并沒有selectd變量中的集合元素,而是選擇了m集合元素,則返回的應該是MyList2數(shù)據(jù)源中的集合元素,運行結(jié)果如下圖所示。對于不同的select對象返回的結(jié)果也不盡相同,當開發(fā)人員需要進行復合查詢時,可以通過select語句返回不同的復合查詢對象,這在多數(shù)據(jù)源和多數(shù)據(jù)對象查詢中是非常有幫助的。二、基本知識與技能—group分組子句

在LINQ查詢語句中,group子句對from語句執(zhí)行查詢的結(jié)果進行分組,并返回元素類型為IGrouping<TKey,TElement>的對象序列。group子句支持將數(shù)據(jù)源中的數(shù)據(jù)進行分組。但進行分組前,數(shù)據(jù)源必須支持分組操作才可使用group語句進行分組處理,示例代碼如下圖所示。二、基本知識與技能—group分組子句publicclassStudent//定義一個學生類

{publicintclassNo;//定義班級號屬性

publicstringstuName;//定義姓名屬性

publicStudent(intclassNo,stringstuName)//定義方法

{this.classNo=classNo;this.stuName=stuName;}}以下代碼設計了一個類用于描述學生的姓名和班級,并且按照班級進行分組,這樣數(shù)據(jù)源就能夠支持分組操作。二、基本知識與技能—group分組子句

protectedvoidPage_Load(objectsender,EventArgse){List<Student>StudentList=newList<Student>();//定義list集合

StudentList.Add(newStudent(1,"Jack"));//添加一項

StudentList.Add(newStudent(1,"Tom"));//添加一項

StudentList.Add(newStudent(2,"Mary"));//添加一項

StudentList.Add(newStudent(2,"Alex"));//添加一項

StudentList.Add(newStudent(2,"Groy"));//添加一項

vargl=frompinStudentListgrouppbyp.classNo;

//linq分組查詢

foreach(varelementingl)//遍歷組

{Response.Write("ClassNO:"+element.Key+"<br/>");//輸出數(shù)據(jù)

foreach(Studentsinelement)//遍歷組下每一個記錄項

{Response.Write(s.stuName+"");//輸出數(shù)據(jù)

}Response.Write("<br/>");}}Sample9-2-4二、基本知識與技能—group分組子句group子句將數(shù)據(jù)源中的數(shù)據(jù)進行分組,在遍歷數(shù)據(jù)元素時,并不像前面的章節(jié)那樣直接對元素進行遍歷,因為group子句返回的是元素類型為IGrouping<TKey,TElement>的對象序列,必須在循環(huán)中嵌套一個對象的循環(huán)才能夠查詢相應的數(shù)據(jù)元素。在使用group子句時,LINQ查詢子句的末尾并沒有select子句,因為group子句會返回一個對象序列,通過循環(huán)遍歷才能夠在對象序列中尋找到相應的對象的元素,因此如果使用group子句進行分組操作,可以不使用select子句。運行結(jié)果如下所示。二、基本知識與技能—orderby排序子句

在SQL查詢語句中,常常需要對現(xiàn)有的數(shù)據(jù)元素進行排序,例如注冊用戶的時間,以及新聞列表的排序,這樣能夠方便用戶在應用程序使用過程中快速獲取需要的信息。在LINQ查詢語句中同樣支持排序操作以提取用戶需要的信息。示例代碼如下所示。

vargl=frompinStudentorderbyp.ClassNoselectp;

orderby子句同樣能夠?qū)崿F(xiàn)倒序排列,倒序排列在應用程序開發(fā)過程中應用的非常廣泛,例如新聞等。用戶關心的都是當天的新聞而不是很久以前發(fā)布的某個新聞,如果管理員發(fā)布了一個新的新聞,顯示在最上方的應該是最新的新聞。在orderby子句中可以使用descending關鍵字進行倒序排列,示例代碼如下所示。vargl=frompinStudentorderbyp.ClassNodescending

selectp;

三、任務2的實施步驟:1.添加一個web窗體,并加入一個gridview控件

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論