LINQ语法二
本文將講述LINQ的基礎查詢(此文所有例子都使用LINQ to Object)
在此之前,我們先創建一個用于示例的數據源:
-
- Student類:表示學生,包括學號、姓名及班級
- Courses類:表示學生選擇的課程,包括學號、課程名稱及學時數
- DataCreator類:靜態類,通過GenerateData方法產生示例數據
- 生成的數據如下:
學號 姓名 班級 課程名稱 學時
003 王五 二班 經濟學 20
003 王五 二班 企業管理 20
003 王五 二班 財務管理 30
002 李四 一班 歷史 20
002 李四 一班 政治 20
002 李四 一班 語文 30
001 張三 一班 數學 20
001 張三 一班 語文 20
001 張三 一班 物理 15Main方法中生成數據:
C# - List<Student> students = new List<Student>();
- List<Courses> courses = new List<Courses>();
- DataCreator.GenerateData(students, courses);
-
實際上from .. in ..語句類似于foreach語句,比如
-
from student in students 類似于 foreach(Student student in students)
-
student是students集合中的元素,那么通常在where語句中,可以使用student作為判斷的依據,例如:
-
篩選出一班的所有學生:
- C#
- var query = from student in students
- where student.Class == "一班"
- select student;
- foreach (var s in query)
- {
- Console.WriteLine(s);
- }
- C#
- var query = from course in courses
- where course.Credit >= 20
- select course;
- C#
- var query = from student in students
- where student.Class == "一班" && student.Name.StartsWith("張")
- select student;
- C#
- var query = from student in students
- where DateTime.Now == DateTime.Now
- select student;
- 下例以students集合的數量作為判斷條件,當stuents的數量大于等于3時篩選出所有學生資料:
- C#
- var query = from student in students
- where students.Count>=3
- select student;
- C#
- String[] ids = {"001","003" };
- var query = from student in students
- where ids.Contains(student.ID)
- select student;
- C#
- var query = from student in students
- where (from cours in courses where cours.Name == "語文" select cours.StudentId).Contains(student.ID)
- select student;
- foreach (var s in query)
- {
- Console.WriteLine(s);
- }
-
?
排序
?
?
篩選
LINQ中通過where子句篩選數據,where子句后跟條件,from后的對象都可作為where子句判斷條件的主體。
篩選學時大于等于20的課程:
可使用&&或||來連接多個條件,如篩選出一班姓張的同學:
當然,并不是說條件語句中只能使用from后的對象,它可以使用任何對象作為判斷依據(下面LINQ只作演示沒實際意義):條件當前時間等于當前時間,此條件永遠為真,故會查詢出所有的學生資料。
下例篩選學號存在于ids集合中的學生:
查詢選修了語文課程的學生資料:
注意上例中使用了嵌套查詢,students where語句中包含另一個LINQ語句,該語句從courses集合中返回選修了語文課程的學號,它是一個IEnumerable<String>集合,所以可以在此集合上使用IEnumerable的Contains方法,判斷集合中是否包含當前student對象的ID,包含則返回true,即students的where語句為真,該student對象被添加入結果集合,反之不添加。
排序語句比較簡單,基本語法為:
orderby .. ascending | descending[, ..ascending | descending]
其中ascending表示升序排列,descending表示降序排列
C#可根據多個字段進行排序:
C#待續…
以下源碼產生本文示例數據:
C#轉載于:https://www.cnblogs.com/zgqys1980/archive/2012/08/16/2641869.html
總結
- 上一篇: 吃什么能增加食欲?
- 下一篇: 【Demo 0116】堆的使用