LINQ(Language Integrated Qyery),中文名字是語言集成查詢。它提供一個統一的編程概念和語法,編程人員不需要關心將要訪問的是關系數據庫還是xml數據,或是遠程的對象,它都采用同樣的訪問方式。
LINQ是一系列技術,包括LINQ、DLINQ、XLINQ等。其中LINQ到對象是對內存進行操作,LINQ到SQL是對數據庫的操作,LINQ到XML是對XML數據進行操作。
LINQ技術采用類似于SQL語句的語法,它的語法結構是從from開始,結束于select或group子句。開頭的from子句可以跟隨0個或者更多個from或where子句。每個from子句都是一個產生器,它引入了一個迭代變量在序列上搜索:每個where子句是一個過濾器,它從結果中排除一些項。最后的select或group子句指定了依據迭代變量得出結果的外形。Select或group子句前面可有一個orderby子句,它指明返回結果的順序。最后into子句可以通過把一條查詢語句的結果作為產生器插入子序列查詢中的方式來拼接查詢。
LINQ查詢
查詢是一種從數據源檢索數據的表達式。查詢通常用專門的查詢語言來表示。LINQ提供一種跨各種數據源和數據格式的一致模型。在LINQ查詢中,始終會用到對象。可以使用相同的基本編碼模式來查詢和轉換XML文檔、SQL數據庫、ADO.NET數據集、.NET集合中的數據以及對其有LINQ提供程序可用的任何其他格式的數據。
LINQ的查詢操作通常由以下三個不同的操作組成:
1.獲得數據源。
2.創建查詢。
3.執行查詢。
使用LINQ查詢
新建項目,添加頁面Default.aspx,頁面的Page_Load事件中的代碼如下:
1 PRotected void Page_Load(object sender, EventArgs e) 2 { 3 string[] name = { "王楠", "汪亞旗", "劉遠", "陳子胥", "蘇城", "汪徐" }; 4 var result = from str in name 5 where str.Length == 3 6 select str; 7 foreach (var str1 in result) 8 { 9 Response.Write(str1);10 }11 }
在LINQ中,查詢的執行與查詢本身截然不同,如果只是創建查詢變量,則不會檢索出任何數據。
在LINQ查詢中,數據源必須支持泛型IEnumerable(T)接口,在上面的查詢中由于數據源是數組,它隱式支持泛型接口,因此可以使用LINQ查詢。
對于支持IEnumerable(T)或派生接口的類型則稱為可查詢類型。可查詢類型不需要進行修改或特殊處理就可以用于LINQ數據源。如果數據源還沒有作為可查詢類型出現在內存中,則LINQ提供程序必須以此方式表示數據源。
例如:LINQ to XML將XML文檔加載到可查詢的XElement類型中:
1 XElement xelement = XElement.Load(@"G:/file1.xml");
在LINQ查詢中,首先手動或使用對象關系設計器在設計時創建對象關系映射。針對這些對象編寫查詢,然后由LINQ to SQL在運行時處理與數據庫的通信。
LINQ數據源是支持泛型IEnumerable(T)接口或從該接口繼承的接口的任意對象。
查詢用來指定要從數據庫中檢索的信息,查詢還可以指定在返回這些信息之前如何對其進行排序、分組和結構化。查詢存儲在查詢變量中,并用查詢表達式進行初始化。
查詢變量本身支持存儲查詢命令,而只有執行查詢才能獲取數據信息。查詢分為以下兩種:
1.延遲查詢。在定義完查詢變量后,實際的查詢執行會延遲到在foreach語句中循環訪問查詢變量時發生。
2.強制立即執行。對一系列源元素執行聚合函數的查詢必須首先循環訪問這些元素。Count、Max、Average和First就屬于此類查詢。由于查詢本身必須使用foreach以便返回結果,因此這些查詢在執行時不使用foreach語句。此外,這些類型的查詢返回單個值,而不是IEnumerable集合。
LINQ查詢操作
1.獲取數據源
在LINQ查詢中,查詢表達式必須以from子句開頭。它同時指定了數據源和范圍變量。在對源序列進行遍歷的過程中,范圍變量表示源序列中的每個后續元素。將根據數據源中元素的類型對范圍變量進行強類型化。
獲取數據,其中Student為數據源,Stu為選擇范圍,代碼如下:
1 var result = from Stu in Student select Stu;
2.篩選
最常用的查詢操作是應用布爾表達式形式的篩選器。此篩選器使查詢只返回那些表達式結果為true的元素。使用where子句生成結果。實際上,篩選器指定從源序列中排除哪些元素。
篩選數據,其中Student為數據源,Stu為選擇范圍,代碼如下:
1 var result = from Stu in Student 2 where Stu.Address=="南陽"3 select Stu;
如果要使用多個篩選條件的話,可以使用邏輯符號,如“&&”、“||”等。
使用多個篩選條件,其中Student為數據源,Stu為選擇范圍,代碼如下:
1 var result = from Stu in Student2 where Stu.Address == "南陽" && Stu.Sex == "女"3 select Stu;
3.排序
使用orderby子句可以很方便地對返回的數據進行排序。orderby子句對返回的序列中的元素,根據指定的排序類型,使用默認比較器進行排序。其中,ascending表示按順序排列,為默認方式;descending表示按逆序排列。若要把篩選的數據進行逆序排列,需要在查詢語句中加上descending修飾符。
代碼如下:
1 var result = from Stu in Student2 where Stu.Address == "南陽"3 orderby Stu.Name ascending 4 select Stu;
4.分組
使用group子句可產生按照指定的鍵進行分組的序列。鍵可以采用任何數據類型。
代碼如下:
1 var result = from Stu in Student 2 group Stu by Stu.Sex; 3 foreach (var result1 in result) 4 { 5 Console.WriteLine(result1.Key); 6 foreach (Student student in result1) 7 { 8 Console.WriteLine("{0}", student.Name); 9 }10 }
在使用group子句結束查詢時,結果采用列表形式列出。列表中的每個元素都是一個具有Key成員及根據該鍵分組的元素列表的對象。在循環訪問生成組序列的查詢時,必須使用嵌套的foreach循環。外部循環用于循環訪問每個組,內部循環用于循環訪問每個組的成員。
如果必須引用組操作的結果,可以使用into關鍵字來創建可進一步查詢的標識符。 代碼如下:
1 ` var result = from Stu in Student2 group Stu by Stu.Address into stuGroup3 where stuGroup.Count() > 14 orderby stuGroup.Key5 select stuGroup;
5.聯接
聯接運算創建數據源中沒有顯式建模的序列之間的關聯。在LINQ中,不必像在SQL中那樣頻繁使用join,因為LINQ中的外鍵在對象模型中表示為包含項集合的屬性。不必執行聯接,只需使用點表示法訪問。
6.投影
select子句生成查詢結果并指定每個返回的元素的類型。當select子句生成源元素副本以外的內容時,該操作稱為“投影”。使用投影轉換數據是LINQ查詢表達式的一種強大功能。
使用LINQ進行數據轉換
LINQ不僅可以用于檢索數據,而且還是一個功能強大的數據轉換工具。通過LINQ查詢,可以將源序列用作輸入,并采用多種方式修改它以創建新輸出的序列。可以通過排序和分組來修改序列本身,而不必修改元素本身。但是,LINQ查詢最強大的功能可能在于它能夠創建新類型,這一功能在select子句中實現。例如,可執行以下任務:
1.將多個輸入序列合并到具有新類型的單個輸出序列中。
2.創建其元素只包含源序列中的各個元素的一個或幾個屬性的輸出序列。
3.創建其元素包含對源數據執行的操作結果的輸出序列。
4.創建不同格式的輸出序列。
將多個輸入聯接到一個輸出序列
新建項目,添加頁面Default.aspx,Default.aspx.cs中的代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Xml.Linq; 8 9 namespace Webapplication110 {11 public partial class Default : System.Web.UI.Page12 {13 protected void Page_Load(object sender, EventArgs e)14 {15 List<Student> students = new List<Student>()16 {17 new Student {First="張",18 Last="三",19 ID=111,20 Street="復興大道338",21 City="杭州",22 Scores=new List<int>{84,97,68,92}}, 23 new Student {First="張",24 Last="影",25 ID=111,26 Street="復興大道338",27 City="云南",28 Scores=new List<int>{84,97,68,92}},29 new Student {First="張",30 Last="雨",31 ID=111,32 Street="復興大道338",33 City="蕪湖",34 Scores=new List<int>{84,97,68,92}},35 };36 37 List<Teacher> teachers = new List<Teacher>()38 {39 new Teacher {First="張",40 Last="敏",41 ID=111,42 City="杭州"}, 43 new Teacher {First="張",44 Last="雪",45 ID=111,46 City="云南"},47 new Teacher {First="張",48 Last="青",49 ID=111,50 City="蕪湖"}51 };52 53 //創建查詢54 var peopleInSeattle = (from student in students55 where student.City == "蕪湖"56 select student.First + student.Last)57 .Concat(from teacher in teachers58 where teacher.City == "蕪湖"59 select teacher.First + teacher.Last);60 Response.Write("在蕪湖的教師和學生:");61 //執行查詢62 foreach (var person in peopleInSeattle)63 {64 Response.Write(" " + person);65 }66 }67 68 class Student//學生類69 {70 public string First { set; get; }71 public string Last { set; get; }72 public int ID { set; get; }73 public string Street { set; get; }74 public string City { set; get; }75 public List<int> Scores;76 }77 78 class Teacher//教師類79 {80 public string First { set; get; }81 public string Last { set; get; }82 public int ID { set; get; }83 public string City { set; get; }84 }85 86 }87 }
將內存中的對象轉換為XML
新建項目,添加頁面Default.aspx,Default.aspx.cs中的代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Xml.Linq; 8 9 namespace WebApplication210 {11 public partial class Default : System.Web.UI.Page12 {13 protected void Page_Load(object sender, EventArgs e)14 {15 List<Student> students = new List<Student>()16 {17 new Student {First="張",18 Last="三",19 ID=111,20 Street="復興大道338",21 City="杭州",22 Scores=new List<int>{84,97,68,92}}, 23 new Student {First="張",24 Last="影",25 ID=111,26 Street="復興大道338",27 City="云南",28 Scores=new List<int>{84,97,68,92}},29 new Student {First="張",30 Last="雨",31 ID=111,32 Street="復興大道338",33 City="蕪湖",34 Scores=new List<int>{84,97,68,92}},35 };36 37 //創建查詢38 var studentsToXml = new XElement("Root",39 from student in students40 let x = String.Format("{0},{1},{2},{3}", student.Scores[0], student.Scores[1], student.Scores[2], student.Scores[3])41 select new XElement("student",42 new XElement("First", student.First),43 new XElement("Last", student.Last),44 new XElement("Scores", x)45 )46 );47 //執行查詢48 Response.Write(studentsToXml);49 }50 51 class Student//學生類52 {53 public string First { set; get; }54 public string Last { set; get; }55 public int ID { set; get; }56 public string Street { set; get; }57 public string City { set; get; }58 public List<int> Scores;59 }60 61 }62 }
LINQ到ADO.NET
LINQ到ADO.NET是ADO.NET和LINQ結合的產物。LINQ到ADO.NET主要用來操作關系數據的,包括:
1. LINQ到DataSet:可以將更豐富的查詢功能建立到DataSet中。
2. LINQ到SQL:提供運行時基礎結構,用于將關系數據庫作為對象管理。
3. LINQ到實體:通過實體數據模型,把關系數據在.NET環境中公開為對象,這將使得對象層成為實現LINQ支持的理想目標。
LINQ to SQL
通過使用LINQ到SQL,可以使用LINQ技術像訪問內存中的集合一樣訪問SQL數據庫。LINQ到SQL可以完成的常用功能包括選擇、插入、更新、刪除。這四大功能正是對應于數據庫程序開發的所有執行功能,因此,在掌握了LINQ技術后,就不再需要針對特殊的數據庫學習特別的SQL語法。
創建對象模型
對象模型是關系數據庫在編程語言中表示的數據模型,對對象模型的操作就是對關系數據庫的操作。
創建對象模型方法有三種:
1. 使用對象關系設計器,對象關系設計器提供了用于從現有數據庫創建對象模型的豐富用戶界面,它包含在VS2010之中,最適合小型或中型數據庫。
2. 使用SQLMetal代碼生成工具,這個工具適合大型數據庫的開發,因此對于普通讀者來說,這種方法就不常用了。
3. 直接編寫創建對象的代碼。
使用對象關系設計器創建對象模型
對象關系設計器(O/R設計器)提供了一個可視化設計界面,用于創建基于數據庫中對象的LINQ到SQL實體類和關聯(關系)。它生成一個強類型的DataContext上下文對象,用于在實體類與數據庫之間發送和接收數據。
強類型DataContext上下文對象對應于類DataContext,它表示LINQ到SQL框架的主入口點,充當SQLServer數據庫與映射到數據庫的LINQ到SQL實體類之間管道。
DataContext 類包含用于連接數據庫以及操作數據庫數據的連接字符串信息和方法。
DataContext類提供的屬性如下表所示:
1.ChangeConflicts:返回調用SubmitChanges時導致并發生沖突的集合。
2.CommandTimeout:增大查詢的超時期限,如果不增大則會在默認超時期限間出現超時。
3.Connection:返回由使用的連接。
4.DeferredLoadingEnabled:指定是否延遲加載一對多關系或一對一關系。
5.LoadOptions:獲取或設置與此DataContext關聯的DataLoadOptions。
6.Log:指定要寫入SQL查詢或命令的目標。
7.Mapping:指定映射所基于的MetaModel。
8.ObjectTrackingEabled:指示框架跟蹤此DataContext的原始值和對象標識。
9.Transaction:為.NET框架設置要用于訪問數據庫的本地事物。
DataContext類提供的方法如下:
1.CreateDatabase:在服務器上創建數據庫。
2.CreateMethodCallQuery(TResult):基礎結構,執行與指定的CLR方法相關聯的表值數據庫函數。
3.DatabaseExists:確定是否可以打開關聯數據庫。
4.DaleteDataBase:刪除關聯數據庫。
5.ExecuteCommand:直接對數據庫執行SQL命令。
6.ExecuteDynamicDelete:在刪除重寫方法中調用,以向LINQ到SQL重新委托生成和執行刪除操作的動態SQL的任務。
7.ExecuteDynamicInsert:在插入重寫方法中調用,以向LINQ到SQL重新委托生成和執行插入操作的動態SQL的任務。
8.ExecuteDynamicUpdate:在更新重寫方法中調用,以向LINQ到SQL重新委托生成和執行更新操作的動態SQL的任務。
9.ExecuteMethodCall:基礎結構,執行數據庫存儲過程或指定的CLR方法關聯的標量函數。
10.ExecuteQuery:已重載,直接對數據庫執行SQL查詢。
11.GetChangeSet:提供對由DataContext跟蹤的已修改對象的訪問。
12.GetCommand:提供有關由LINQ到SQL生成的SQL命令的信息。
13.GetTable:已重載,返回表對象的集合。
14.Refresh:已重載,使用數據庫中數據刷新對象狀態。
15.SubmitChanges:已重載,計算要插入、更新或刪除的已修改對象的集合,并執行相應命令以實現對數據庫的更改。
16.Translate:已重載,將現有IDataReader轉換為對象。
LINQ查詢數據庫
LINQ到SQL中的查詢與LINQ中的查詢使用相同的語法,只不過它們操作的對象有所差異,LINQ到SQL查詢中引用的是對象映射到數據庫中的元素。
應用程序將使用LINQ到SQL API來請求查詢執行,LINQ到SQL提供程序隨后會將查詢轉換成SQL文本,并委托ADO提供程序執行。ADO提供程序將查詢結果作為DataReader返回,而LINQ到SQL提供程序將ADO結果轉換成用戶對象的IQueryable集合。
將信息作為只讀信息進行檢索
新建項目,添加頁面WebForm1.aspx,WebForm1.aspx.cs中的代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 namespace WebApplication3 9 {10 public partial class WebForm1 : System.Web.UI.Page11 {12 protected void Page_Load(object sender, EventArgs e)13 {14 DataClasses1DataContext data = new DataClasses1DataContext();15 data.ObjectTrackingEnabled = false;16 var result = from Student in data.Student select Student;17 this.GridView1.DataSource = result;18 this.GridView1.DataBind();19 }20 }21 }
LINQ更改數據庫
在LINQ到SQL中執行插入、更新和刪除操作的方法是:向對象模型中添加對象、更改和移除對象模型中的對象,然后LINQ到SQL會把所做的操作轉化成SQL,最后把這些SQL提交到數據庫執行。在默認情況下,LINQ到SQL就會自動生成動態SQL來實現插入、讀取、更新和操作。
插入操作
代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 namespace WebApplication3 9 {10 public partial class WebForm1 : System.Web.UI.Page11 {12 protected void Page_Load(object sender, EventArgs e)13 {14 DataClasses1DataContext data = new DataClasses1DataContext();15 Student student1 = new Student();16 student1.stuNo = "1010";17 student1.Class = "15中藥五班";18 student1.stuName = "吳語";19 student1.Age = 23;20 data.Student.InsertOnSubmit(student1);21 data.SubmitChanges();22 var result = from Student in data.Student select Student;23 this.GridView1.DataSource = result;24 this.GridView1.DataBind();25 }26 }27 }
更新操作
代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 namespace WebApplication3 9 {10 public partial class WebForm1 : System.Web.UI.Page11 {12 protected void Page_Load(object sender, EventArgs e)13 {14 DataClasses1DataContext data = new DataClasses1DataContext();15 var result = from Student in data.Student 16 where Student.stuNo=="1010" 17 select Student;18 foreach (Student stu in result)19 {20 stu.stuName = "吳鋒";21 stu.Age = 22;22 }23 data.SubmitChanges();24 this.GridView1.DataSource = result;25 this.GridView1.DataBind();26 }27 }28 }
刪除操作
代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 namespace WebApplication3 9 {10 public partial class WebForm1 : System.Web.UI.Page11 {12 protected void Page_Load(object sender, EventArgs e)13 {14 DataClasses1DataContext data = new DataClasses1DataContext();15 var result = from Student in data.Student 16 where Student.stuNo=="1012" 17 select Student;18 foreach (Student stu in result)19 {20 data.Student.DeleteOnSubmit(stu);21 }22 data.SubmitChanges();23 }24 }25 }
插入、修改和刪除的操作步驟中都有一個關鍵步驟就是提交更改,在代碼中體現就是:db.SubmitChanges();其實,無論對對象做了多少更改,都只是更改內存中的副本,并未對數據庫中實際數據做任何更改,只有直接對DataContext顯示調用SubmitChanges,所做的更改才會有效果。
當進行此調用時,DataContext會設法將所做的更改轉化為等效的SQL命令,可以使用自定義的邏輯來重寫這些操作,但提交的順序是由DataContext的一項稱為更改處理器的服務來協調的,事件的順序如下:
1.當調用SubmitChanges時,LINQ到SQL會檢查已知對象的集合,以確定新實例是否已附加到它們。如果已附加,這些新實例將添加到被跟蹤對象的集合。
2.所有具有掛起更改的對象將按照它們之間的依賴關系排序成一個對象序列。如果一個對象的更改依賴于其他對象,則這個對象將排在其依賴項之后。
3.在即將傳輸任何實際更改時,LINQ到SQL會啟動一個事務來封裝由各條命令組成的系列。
4.對對象的更改會逐個轉換為SQL命令,然后發送到服務器。
此時,如果數據庫檢測到任何錯誤,都會造成提交進程停止并引發異常。將回滾對數據庫的所有更改,就像未進行過提交一樣。DataContext仍具有所有更改的完整記錄,因此可設法修正問題并重新調用SubmitChanges。
LinqDataSource控件
LinqDataSource控件,為用戶提供了一種將數據控件連接到多種數據源的方法,其中包括數據庫數據、數據源類和內存中集合。
通過使用LinqDataSource控件,可以針對所有這些類型的數據源指定類似于數據庫檢索的任務(選擇、篩選、分組和排序)。可以指定針對數據庫表的修改任務(更新、刪除和插入)。
若要顯示LinqDataSource控件中的數據,可將數據綁定控件綁定到LinqDataSource控件。將數據綁定控件的DataSourceID屬性設置為LinqDataSource控件的ID即可。
數據綁定控件將自動創建用戶界面以顯示LinqDataSource控件中的數據。它還提供用于對數據進行排序和分頁的界面。在啟用數據修改后,數據綁定控件會提供用于更新、插入和刪除記錄的界面。
通過將數據綁定控件配置為不自動生成數據控件字段,可以限制顯示的數據(屬性)。然后可以在數據綁定控件中顯式定義這些字段。雖然LinqDataSource控件會檢索所有屬性,但數據綁定控件僅顯示指定的屬性。
使用LinqDataSource控件
在頁面Default.aspx中添加如下代碼:
1 <div> 2 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="stuNo" DataSourceID="LinqDataSource1" > 3 <Columns> 4 <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> 5 <asp:BoundField DataField="stuNo" HeaderText="stuNo" ReadOnly="True" SortExpression="stuNo" /> 6 <asp:BoundField DataField="Class" HeaderText="Class" SortExpression="Class" /> 7 <asp:BoundField DataField="stuName" HeaderText="stuName" SortExpression="stuName" /> 8 <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" /> 9 </Columns>10 </asp:GridView>11 <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="WebApplication3.DataClasses1DataContext" EnableDelete="True" EnableInsert="True" EnableUpdate="True" EntityTypeName="" TableName="Student">12 </asp:LinqDataSource>13 </div>
QueryExtender
QueryExtender控件是為了簡化LinqDatasource控件或EntityDataSource控件返回的數據過濾而設計的,它主要是將過濾數據的邏輯從數據控件中分離出來。
QueryExtender控件的使用非常簡單,只需要往頁面上增加一個QueryExtender控件,指定其數據源是哪個控件并設置過濾條件就可以了。比如,當在頁面中顯示產品的信息時,你可以使用該控件去顯示那些在某個價格范圍內的產品,也可以搜索用戶指定名稱的產品。
QueryExtender控件使用篩選器從數據源中檢索數據,并且在數據源中不使用顯式的where子句。利用該控件,能夠通過聲明性語法從數據源中篩選出數據。
使用QueryExtender控件有以下優點:
1.與編寫where子句相比,可以提供功能更豐富的篩選表達式。
2.提供一種LinqDataSource和EntityDataSource控件均可使用的查詢語言。
3.能夠與LinqDataSource或EntityDataSource控件配合使用或與第三方數據源配合使用。
4.支持多種可單獨和共同使用的篩選選項。
QueryExtender控件支持多種可用于篩選數據的選項。該控件支持搜索字符串、搜索指定范圍內的值、將表中的屬性值與指定的值進行比較、排序和自定義查詢。在 QueryExtender 控件中以LINQ 表達式的形式提供這些選項。QueryExtender控件還支持asp.net動態數據專用的表達式。
QueryExtender控件的篩選選項如下:
1.QueryExtender:表示控件的主類。
2.CustomExpression:為數據源指定用戶定義的表達式。自定義表達式可以位于函數中,并且可以從頁面標記中調用。
3.OrderByExpression:將排序表達式應用于IQueryable數據源對象。
4.PropertyExpression:根據WhereParameters集合中的指定參數創建where子句。
5.RangeExpression:確定值大于還是小于指定的值,或者值是否在兩個指定的值之間。
6.SearchExpression:搜索一個或多個字段中的字符串值,并將這些值與指定的字符串值進行比較。
7.ThenByExpression:應用OrderByExpression表達式后將排序表達式應用于IQueryable數據源對象。
8.DynamicFilterExpression:使用指定的篩選器控件生成數據庫查詢。
9.ControlFilterExpression:使用在源數據綁定控件中選擇的數據鍵生成數據庫查詢。
使用QueryExtender控件實現指定字符串的篩選查詢
在頁面Default.aspx中添加如下代碼:
1 <div> 2 <asp:TextBox ID="TextBox1" runat="server" /> 3 <asp:Button ID="Button1" runat="server" Text="查詢" /> 4 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="stuNo" DataSourceID="LinqDataSource1" > 5 <Columns> 6 <asp:BoundField DataField="stuNo" HeaderText="stuNo" ReadOnly="True" SortExpression="stuNo" /> 7 <asp:BoundField DataField="Class" HeaderText="Class" SortExpression="Class" /> 8 <asp:BoundField DataField="stuName" HeaderText="stuName" SortExpression="stuName" /> 9 <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" />10 </Columns>11 </asp:GridView>12 <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="WebApplication3.DataClasses1DataContext" EntityTypeName="" TableName="Student">13 </asp:LinqDataSource>14 <asp:QueryExtender ID="QueryExtender1" runat="server" TargetControlID="LinqDataSource1">15 <asp:SearchExpression DataFields="stuName" SearchType="StartsWith">16 <asp:ControlParameter ControlID="TextBox1" />17 </asp:SearchExpression>18 </asp:QueryExtender>19 </div>
新聞熱點
疑難解答