在 C# 中,可以使用 LINQ 从 List
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();
注意事项
- 原始列表不变: LINQ 查询不会修改原始数据。
- 性能: 对于大型集合,尽量使用过滤后再处理的方式减少数据量。
- 异常处理: 确保过滤条件不会引发异常(如空值检查)。
总结
- LINQ 是操作 List
的强大工具,通过 Where 方法可以轻松实现条件过滤。 - 支持简单条件和复杂条件,结合其他方法可以实现更多功能。
- 延迟执行特性有助于优化性能,但需要注意查询结果的使用时机。