跳到主要内容

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:一个布尔表达式,用于判断是否保留该元素。

代码示例

假设我们有一个包含学生信息的列表,每个学生有 NameAge 两个属性。我们希望筛选出年龄大于 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 岁的学生,并输出他们的名字。

逐步讲解

  1. 数据源:我们首先定义了一个包含学生信息的列表 students
  2. 过滤条件:使用 Where 方法,我们传入一个 lambda 表达式 s => s.Age > 18,该表达式检查每个学生的年龄是否大于 18 岁。
  3. 结果Where 方法返回一个满足条件的元素集合,我们将其存储在 adults 变量中。
  4. 输出:最后,我们遍历 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 官方文档