📅 Day 12:LINQ(Language Integrated Query)基礎
? 目標:
- 理解 LINQ 的基本概念和作用;
- 掌握使用 LINQ 查詢集合(如
List<T>
、Array
); - 學會使用常用 LINQ 方法:
Where
,Select
,OrderBy
,GroupBy
,First
,Any
,Count
等; - 能夠編寫查詢語句實現數據篩選、排序、投影等操作;
- 編寫一個簡單的 LINQ 查詢程序,例如學生信息查詢系統。
🔍 什么是 LINQ?
LINQ(Language Integrated Query) 是 C# 中用于統一查詢各種數據源(如數組、集合、數據庫、XML 等)的語法。它將查詢能力直接集成到 C# 語言中,使代碼更簡潔、可讀性更強。
LINQ 支持兩種查詢語法:
- 查詢語法(Query Syntax):類似 SQL,結構清晰;
- 方法語法(Method Syntax):使用 Lambda 表達式,功能強大靈活。
🧩 基本用法 & 示例
首先,確保你引入了命名空間:
using System.Linq;
📋 示例準備:定義一個 Student
類并創建集合
class Student
{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }
}// 創建學生列表
List<Student> students = new List<Student>
{new Student { Id = 1, Name = "張三", Score = 85 },new Student { Id = 2, Name = "李四", Score = 92 },new Student { Id = 3, Name = "王五", Score = 78 },new Student { Id = 4, Name = "趙六", Score = 95 },
};
🧪 一、查詢語法(Query Syntax)
💡 示例 1:查詢所有成績大于 90 的學生
var highScorers = from student in studentswhere student.Score > 90select student;foreach (var s in highScorers)
{Console.WriteLine($"{s.Name} - 成績:{s.Score}");
}
💡 示例 2:按成績從高到低排序
var sortedStudents = from student in studentsorderby student.Score descendingselect student;foreach (var s in sortedStudents)
{Console.WriteLine($"{s.Name} - 成績:{s.Score}");
}
💡 示例 3:投影查詢(只取部分字段)
var namesAndScores = from student in studentsselect new { student.Name, student.Score };foreach (var item in namesAndScores)
{Console.WriteLine($"姓名:{item.Name},成績:{item.Score}");
}
🧠 二、方法語法(Method Syntax)
方法語法結合 Lambda 表達式,更加靈活高效。
💡 示例 1:使用 Where
過濾數據
var highScorers = students.Where(s => s.Score > 90);foreach (var s in highScorers)
{Console.WriteLine($"{s.Name} - 成績:{s.Score}");
}
💡 示例 2:使用 OrderByDescending
排序
var sortedStudents = students.OrderByDescending(s => s.Score);foreach (var s in sortedStudents)
{Console.WriteLine($"{s.Name} - 成績:{s.Score}");
}
💡 示例 3:使用 Select
投影字段
var names = students.Select(s => s.Name);foreach (var name in names)
{Console.WriteLine(name);
}
💡 示例 4:使用 GroupBy
分組統計
var grouped = students.GroupBy(s => s.Score / 10); // 按分數段分組(如 70-79、80-89)foreach (var group in grouped)
{Console.WriteLine($"分數段 {group.Key}0-{group.Key}9:");foreach (var s in group){Console.WriteLine($" {s.Name} - {s.Score}");}
}
🧩 三、常用 LINQ 方法匯總
方法名 | 描述 |
---|---|
Where() | 篩選符合條件的元素 |
Select() | 投影轉換,選擇特定字段 |
OrderBy() | 升序排序 |
OrderByDescending() | 降序排序 |
GroupBy() | 按某個條件分組 |
First() / FirstOrDefault() | 獲取第一個元素 |
Last() / LastOrDefault() | 獲取最后一個元素 |
Single() / SingleOrDefault() | 獲取唯一匹配的元素 |
Count() | 統計元素數量 |
Any() | 判斷是否有符合條件的元素 |
All() | 判斷是否所有元素都滿足條件 |
💪 實戰練習
? 練習 1:學生信息查詢系統
功能要求:
- 輸入一個最低分數,顯示所有高于該分數的學生;
- 顯示成績最高的學生;
- 顯示總人數和平均分。
Console.Write("請輸入最低分數:");
int minScore = int.Parse(Console.ReadLine());var filtered = students.Where(s => s.Score >= minScore).ToList();Console.WriteLine("\n符合條件的學生:");
foreach (var s in filtered)
{Console.WriteLine($"{s.Name} - {s.Score}");
}// 最高分學生
var topStudent = students.OrderByDescending(s => s.Score).First();
Console.WriteLine($"\n最高分學生:{topStudent.Name} - {topStudent.Score}");// 總人數和平均分
int count = students.Count();
double average = students.Average(s => s.Score);
Console.WriteLine($"總人數:{count},平均分:{average:F2}");
? 練習 2:判斷是否存在及早退機制
bool hasHighScorer = students.Any(s => s.Score > 95);
Console.WriteLine(hasHighScorer ? "存在高分學生" : "沒有高分學生");if (students.Any())
{var firstStudent = students.First();Console.WriteLine("第一個學生:" + firstStudent.Name);
}
📝 小結
今天你學會了:
- LINQ 的基本概念及其優勢;
- 使用 查詢語法 和 方法語法 查詢集合;
- 掌握了常用的 LINQ 方法,如
Where
,Select
,OrderBy
,GroupBy
,First
,Any
,Count
等; - 實現了一個基于 LINQ 的學生信息查詢系統。
LINQ 是 C# 中非常強大的工具,能夠極大提升數據處理的效率與代碼的可讀性!
🧩 下一步學習方向(Day 13)
明天我們將進入一個新的主題 —— 委托(Delegate)與事件(Event),它們是 C# 實現回調機制、事件驅動編程的核心。