C# LINQ 过滤
LINQ(Language Integrated Query)是 C# 中用于查询数据的强大工具。它允许你以声明式的方式对集合、数据库、XML 等数据源进行查询和操作。其中,过滤是 LINQ 中最常用的操作之一。通过过滤,你可以从数据集中提取满足特定条件的元素。
本文将详细介绍如何在 C# 中使用 LINQ 进行数据过滤,并通过代码示例和实际案例帮助你理解其应用。
什么是 LINQ 过滤?
LINQ 过滤是指从数据集中筛选出满足特定条件的元素。你可以使用 Where
方法来实现这一功能。Where
方法接受一个谓词(即一个返回布尔值的函数),并根据该谓词的结果来决定是否保留某个元素。
基本语法
csharp
var filteredData = dataSource.Where(item => condition);
dataSource
:要过滤的数据源(例如列表、数组等)。item
:数据源中的每个元素。condition
:一个布尔表达式,用于判断是否保留该元素。
代码示例
假设我们有一个包含学生信息的列表,每个学生有 Name
和 Age
两个属性。我们希望筛选出年龄大于 18 岁的学生。
csharp
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
var students = new List<Student>
{
new Student { Name = "Alice", Age = 20 },
new Student { Name = "Bob", Age = 17 },
new Student { Name = "Charlie", Age = 22 },
new Student { Name = "David", Age = 16 }
};
var adults = students.Where(s => s.Age > 18);
foreach (var student in adults)
{
Console.WriteLine(student.Name);
}
}
}
class Student
{
public string Name { get; set; }
public int Age { get; set; }
}
输出:
Alice
Charlie
在这个例子中,我们使用 Where
方法筛选出年龄大于 18 岁的学生,并输出他们的名字。
逐步讲解
- 数据源:我们首先定义了一个包含学生信息的列表
students
。 - 过滤条件:使用
Where
方法,我们传入一个 lambda 表达式s => s.Age > 18
,该表达式检查每个学生的年龄是否大于 18 岁。 - 结果:
Where
方法返回一个满足条件的元素集合,我们将其存储在adults
变量中。 - 输出:最后,我们遍历
adults
集合并输出每个学生的名字。
实际应用场景
场景 1:筛选商品
假设你有一个电子商务网站,用户可以选择筛选价格低于某个阈值的商品。
csharp
var products = new List<Product>
{
new Product { Name = "Laptop", Price = 1200 },
new Product { Name = "Phone", Price = 800 },
new Product { Name = "Tablet", Price = 500 },
new Product { Name = "Monitor", Price = 300 }
};
var affordableProducts = products.Where(p => p.Price < 1000);
foreach (var product in affordableProducts)
{
Console.WriteLine(product.Name);
}
输出:
Phone
Tablet
Monitor
场景 2:筛选日志
假设你有一个日志系统,你需要筛选出所有错误级别的日志。
csharp
var logs = new List<Log>
{
new Log { Message = "System started", Level = "Info" },
new Log { Message = "Failed to connect to database", Level = "Error" },
new Log { Message = "User logged in", Level = "Info" },
new Log { Message = "Disk space low", Level = "Warning" }
};
var errorLogs = logs.Where(l => l.Level == "Error");
foreach (var log in errorLogs)
{
Console.WriteLine(log.Message);
}
输出:
Failed to connect to database
总结
LINQ 过滤是 C# 中处理数据的重要工具。通过 Where
方法,你可以轻松地从数据集中提取满足特定条件的元素。本文通过代码示例和实际应用场景,帮助你理解了 LINQ 过滤的基本概念和使用方法。
附加资源与练习
- 练习 1:尝试使用 LINQ 过滤一个包含员工信息的列表,筛选出工资高于 5000 的员工。
- 练习 2:创建一个包含书籍信息的列表,筛选出出版年份在 2000 年之后的书籍。
提示
如果你想进一步学习 LINQ,可以查阅 Microsoft 官方文档。