List
、Array
);Where
, Select
, OrderBy
, GroupBy
, First
, Any
, Count
等;LINQ(Language Integrated Query) 是 C# 中用于统一查询各种数据源(如数组、集合、数据库、XML 等)的语法。它将查询能力直接集成到 C# 语言中,使代码更简洁、可读性更强。
LINQ 支持两种查询语法:
首先,确保你引入了命名空间:
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 },
};
var highScorers = from student in students
where student.Score > 90
select student;
foreach (var s in highScorers)
{
Console.WriteLine($"{s.Name} - 成绩:{s.Score}");
}
var sortedStudents = from student in students
orderby student.Score descending
select student;
foreach (var s in sortedStudents)
{
Console.WriteLine($"{s.Name} - 成绩:{s.Score}");
}
var namesAndScores = from student in students
select new { student.Name, student.Score };
foreach (var item in namesAndScores)
{
Console.WriteLine($"姓名:{item.Name},成绩:{item.Score}");
}
方法语法结合 Lambda 表达式,更加灵活高效。
Where
过滤数据var highScorers = students.Where(s => s.Score > 90);
foreach (var s in highScorers)
{
Console.WriteLine($"{s.Name} - 成绩:{s.Score}");
}
OrderByDescending
排序var sortedStudents = students.OrderByDescending(s => s.Score);
foreach (var s in sortedStudents)
{
Console.WriteLine($"{s.Name} - 成绩:{s.Score}");
}
Select
投影字段var names = students.Select(s => s.Name);
foreach (var name in names)
{
Console.WriteLine(name);
}
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}");
}
}
方法名 | 描述 |
---|---|
Where() |
筛选符合条件的元素 |
Select() |
投影转换,选择特定字段 |
OrderBy() |
升序排序 |
OrderByDescending() |
降序排序 |
GroupBy() |
按某个条件分组 |
First() / FirstOrDefault() |
获取第一个元素 |
Last() / LastOrDefault() |
获取最后一个元素 |
Single() / SingleOrDefault() |
获取唯一匹配的元素 |
Count() |
统计元素数量 |
Any() |
判断是否有符合条件的元素 |
All() |
判断是否所有元素都满足条件 |
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}");
bool hasHighScorer = students.Any(s => s.Score > 95);
Console.WriteLine(hasHighScorer ? "存在高分学生" : "没有高分学生");
if (students.Any())
{
var firstStudent = students.First();
Console.WriteLine("第一个学生:" + firstStudent.Name);
}
今天你学会了:
Where
, Select
, OrderBy
, GroupBy
, First
, Any
, Count
等;LINQ 是 C# 中非常强大的工具,能够极大提升数据处理的效率与代码的可读性!
明天我们将进入一个新的主题 —— 委托(Delegate)与事件(Event),它们是 C# 实现回调机制、事件驱动编程的核心。