C# LINQ 查询语法
介绍
LINQ(Language Integrated Query)是 C# 中一种强大的查询语言,它允许开发者以声明式的方式查询各种数据源,如数组、集合、数据库等。LINQ 提供了两种语法形式:查询语法和方法语法。本文将重点介绍 LINQ 查询语法,它类似于 SQL 查询语句,易于阅读和理解,特别适合初学者。
LINQ 查询语法的核心是通过 from
、where
、select
等关键字来构建查询表达式。这些表达式最终会被编译器转换为方法调用,执行查询操作。
基本语法结构
LINQ 查询语法的基本结构如下:
from 变量 in 数据源
where 条件
select 结果
from
:指定数据源和范围变量。where
:过滤数据源中的元素。select
:选择要返回的结果。
示例:查询数组中的偶数
以下是一个简单的示例,展示如何使用 LINQ 查询语法从一个整数数组中筛选出偶数:
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
输出:
2
4
6
8
10
在这个示例中,from num in numbers
指定了数据源 numbers
和范围变量 num
。where num % 2 == 0
过滤出偶数,select num
选择这些偶数作为结果。
逐步讲解
1. from
子句
from
子句用于指定数据源和范围变量。范围变量类似于 foreach
循环中的迭代变量,它代表数据源中的每个元素。
from num in numbers
2. where
子句
where
子句用于过滤数据源中的元素。它接受一个布尔表达式,只有满足条件的元素才会被包含在结果中。
where num % 2 == 0
3. select
子句
select
子句用于指定查询结果的形式。你可以选择返回整个元素,或者返回元素的某个属性。
select num
4. orderby
子句
orderby
子句用于对结果进行排序。你可以指定升序(ascending
)或降序(descending
)。
var sortedNumbers = from num in numbers
orderby num descending
select num;
5. group by
子句
group by
子句用于将数据分组。你可以根据某个属性或表达式将数据源中的元素分组。
var groupedNumbers = from num in numbers
group num by num % 2 == 0 into g
select new { IsEven = g.Key, Numbers = g };
实际案例
案例 1:查询学生成绩
假设我们有一个学生类 Student
,包含学生的姓名和成绩。我们可以使用 LINQ 查询语法来查询成绩大于 80 分的学生。
class Student
{
public string Name { get; set; }
public int Score { get; set; }
}
List<Student> students = new List<Student>
{
new Student { Name = "Alice", Score = 85 },
new Student { Name = "Bob", Score = 75 },
new Student { Name = "Charlie", Score = 90 }
};
var highScorers = from student in students
where student.Score > 80
select student;
foreach (var student in highScorers)
{
Console.WriteLine($"{student.Name}: {student.Score}");
}
输出:
Alice: 85
Charlie: 90
案例 2:分组查询
我们可以使用 group by
子句将学生按成绩是否及格进行分组。
var groupedStudents = from student in students
group student by student.Score >= 60 into g
select new { IsPassed = g.Key, Students = g };
foreach (var group in groupedStudents)
{
Console.WriteLine(group.IsPassed ? "Passed Students:" : "Failed Students:");
foreach (var student in group.Students)
{
Console.WriteLine($"{student.Name}: {student.Score}");
}
}
输出:
Passed Students:
Alice: 85
Bob: 75
Charlie: 90
总结
LINQ 查询语法提供了一种直观且易于理解的方式来查询数据集合。通过 from
、where
、select
等关键字,你可以轻松地过滤、排序和分组数据。LINQ 查询语法特别适合初学者,因为它类似于 SQL,易于上手。
在实际开发中,LINQ 查询语法可以用于处理各种数据源,如数组、集合、数据库等。通过本文的示例和案例,你应该已经掌握了如何使用 LINQ 查询语法来查询数据。
附加资源与练习
- 练习 1:尝试使用 LINQ 查询语法从一个字符串数组中筛选出长度大于 5 的字符串。
- 练习 2:使用
orderby
子句对一个包含学生信息的列表按成绩进行降序排序。 - 练习 3:使用
group by
子句将一个整数数组按奇偶性分组。
如果你想进一步学习 LINQ,可以尝试使用 LINQ 方法语法,它与查询语法功能相同,但更灵活。