跳到主要内容

C# LINQ 查询语法

介绍

LINQ(Language Integrated Query)是 C# 中一种强大的查询语言,它允许开发者以声明式的方式查询各种数据源,如数组、集合、数据库等。LINQ 提供了两种语法形式:查询语法方法语法。本文将重点介绍 LINQ 查询语法,它类似于 SQL 查询语句,易于阅读和理解,特别适合初学者。

LINQ 查询语法的核心是通过 fromwhereselect 等关键字来构建查询表达式。这些表达式最终会被编译器转换为方法调用,执行查询操作。

基本语法结构

LINQ 查询语法的基本结构如下:

csharp
from 变量 in 数据源
where 条件
select 结果
  • from:指定数据源和范围变量。
  • where:过滤数据源中的元素。
  • select:选择要返回的结果。

示例:查询数组中的偶数

以下是一个简单的示例,展示如何使用 LINQ 查询语法从一个整数数组中筛选出偶数:

csharp
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 和范围变量 numwhere num % 2 == 0 过滤出偶数,select num 选择这些偶数作为结果。

逐步讲解

1. from 子句

from 子句用于指定数据源和范围变量。范围变量类似于 foreach 循环中的迭代变量,它代表数据源中的每个元素。

csharp
from num in numbers

2. where 子句

where 子句用于过滤数据源中的元素。它接受一个布尔表达式,只有满足条件的元素才会被包含在结果中。

csharp
where num % 2 == 0

3. select 子句

select 子句用于指定查询结果的形式。你可以选择返回整个元素,或者返回元素的某个属性。

csharp
select num

4. orderby 子句

orderby 子句用于对结果进行排序。你可以指定升序(ascending)或降序(descending)。

csharp
var sortedNumbers = from num in numbers
orderby num descending
select num;

5. group by 子句

group by 子句用于将数据分组。你可以根据某个属性或表达式将数据源中的元素分组。

csharp
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 分的学生。

csharp
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 子句将学生按成绩是否及格进行分组。

csharp
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 查询语法提供了一种直观且易于理解的方式来查询数据集合。通过 fromwhereselect 等关键字,你可以轻松地过滤、排序和分组数据。LINQ 查询语法特别适合初学者,因为它类似于 SQL,易于上手。

在实际开发中,LINQ 查询语法可以用于处理各种数据源,如数组、集合、数据库等。通过本文的示例和案例,你应该已经掌握了如何使用 LINQ 查询语法来查询数据。

附加资源与练习

  • 练习 1:尝试使用 LINQ 查询语法从一个字符串数组中筛选出长度大于 5 的字符串。
  • 练习 2:使用 orderby 子句对一个包含学生信息的列表按成绩进行降序排序。
  • 练习 3:使用 group by 子句将一个整数数组按奇偶性分组。
提示

如果你想进一步学习 LINQ,可以尝试使用 LINQ 方法语法,它与查询语法功能相同,但更灵活。