优秀的编程知识分享平台

网站首页 > 技术文章 正文

在C#中,如何使用LINQ从List中过滤出符合特定条件的元素?

nanyue 2025-02-10 13:40:08 技术文章 4 ℃

在 C# 中,可以使用 LINQ 从 List 中根据特定条件筛选元素。LINQ 提供了强大的查询能力,Where 方法是最常用的过滤方法。


LINQ 过滤的基本语法

var result = list.Where(condition);
  • list: 待过滤的 List
  • condition: Lambda 表达式,用于定义过滤条件。
  • 返回值: 一个 IEnumerable 对象,包含满足条件的元素。

示例代码

示例 1:简单条件过滤

过滤出列表中所有偶数:

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List numbers = new List { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        // 筛选偶数
        var evenNumbers = numbers.Where(n => n % 2 == 0);

        // 输出结果
        Console.WriteLine("Even numbers:");
        foreach (var num in evenNumbers)
        {
            Console.WriteLine(num);
        }
    }
}

示例 2:根据字符串条件过滤

过滤出以 "A" 开头的名字:

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List names = new List { "Alice", "Bob", "Anna", "Charlie" };

        // 筛选以 "A" 开头的名字
        var filteredNames = names.Where(name => name.StartsWith("A"));

        // 输出结果
        Console.WriteLine("Names starting with 'A':");
        foreach (var name in filteredNames)
        {
            Console.WriteLine(name);
        }
    }
}

示例 3:复杂对象的过滤

筛选出年龄大于 30 的用户:

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    static void Main()
    {
        List people = new List
        {
            new Person { Name = "Alice", Age = 25 },
            new Person { Name = "Bob", Age = 35 },
            new Person { Name = "Charlie", Age = 30 }
        };

        // 筛选年龄大于 30 的人
        var filteredPeople = people.Where(person => person.Age > 30);

        // 输出结果
        Console.WriteLine("People older than 30:");
        foreach (var person in filteredPeople)
        {
            Console.WriteLine($"{person.Name}, Age: {person.Age}");
        }
    }
}

立即执行与延迟执行

  • 延迟执行: Where 返回的是一个 IEnumerable,查询操作直到枚举结果时才会执行。
  • 立即执行: 如果需要立即获取结果,可以使用 ToList() 或 ToArray():var filteredList = numbers.Where(n => n % 2 == 0).ToList();

结合其他 LINQ 方法

可以使用 Where 与其他 LINQ 方法(如 OrderBy、Select)结合,完成更复杂的操作:

var result = numbers
    .Where(n => n > 5)           // 筛选大于 5 的数字
    .OrderByDescending(n => n);  // 按降序排序

// 转为列表
var resultList = result.ToList();

注意事项

  1. 原始列表不变: LINQ 查询不会修改原始数据。
  2. 性能: 对于大型集合,尽量使用过滤后再处理的方式减少数据量。
  3. 异常处理: 确保过滤条件不会引发异常(如空值检查)。

总结

  • LINQ 是操作 List 的强大工具,通过 Where 方法可以轻松实现条件过滤。
  • 支持简单条件和复杂条件,结合其他方法可以实现更多功能。
  • 延迟执行特性有助于优化性能,但需要注意查询结果的使用时机。

Tags:

最近发表
标签列表