初学 C# 时,处理集合往往是先写 foreach 循环,再一层层 if 判断。其实 C# 内置了一套更优雅的工具——LINQ(Language Integrated Query,语言集成查询),它让你用接近自然语言的方式对集合进行筛选、排序和变换,代码更短、更好读。这篇带你入门最常用的几个 LINQ 方法。
准备工作
LINQ 的核心方法都在 System.Linq 命名空间里,使用前先引入:
using System;
using System.Collections.Generic;
using System.Linq;
var scores = new List<int> { 55, 92, 78, 61, 88, 40 };
后面的例子都基于这个 scores 集合演示。
Where:筛选符合条件的元素
Where 相当于"过滤器",传入一个返回 bool 的条件,满足条件的元素会被保留:
var passed = scores.Where(s => s >= 60);
foreach (var s in passed)
{
Console.WriteLine(s);
}
// 输出:92、78、61、88
s => s >= 60 是 Lambda 表达式,意思是"对每个元素 s,判断它是否大于等于 60"。
OrderBy:排序
OrderBy 升序,OrderByDescending 降序:
var sorted = scores.OrderByDescending(s => s);
Console.WriteLine(string.Join(", ", sorted));
// 输出:92, 88, 78, 61, 55, 40
Select:把元素变换成另一种形式
Select 会对每个元素做一次"映射",常用于提取字段或转换格式:
var names = new List<string> { "Tom", "Jerry", "Spike" };
var upper = names.Select(n => n.ToUpper());
Console.WriteLine(string.Join(", ", upper));
// 输出:TOM, JERRY, SPIKE
链式调用:LINQ 最强大的用法
这些方法可以像链条一样串起来。比如"找出及格的分数,降序排列,取前三个":
var top3 = scores
.Where(s => s >= 60)
.OrderByDescending(s => s)
.Take(3);
Console.WriteLine(string.Join(", ", top3));
// 输出:92, 88, 78
还有几个高频方法值得记住:
First()取第一个元素,没有则抛异常;FirstOrDefault()找不到时返回默认值Count(...)统计满足条件的个数Any(...)判断是否存在满足条件的元素Sum()/Average()/Max()/Min()做聚合计算
Console.WriteLine(scores.Count(s => s >= 60)); // 输出:4
Console.WriteLine(scores.Max()); // 输出:92
Console.WriteLine(scores.Average()); // 输出:69
小结
LINQ 把常见的集合操作变成了声明式的链式调用:Where 筛选、OrderBy 排序、Select 变换,配合 Take、Count、Max 等方法能覆盖绝大多数日常场景。它代码短、意图清晰,还省去了手写循环时的边界烦恼。下次处理 List 时,先想想能不能用一条 LINQ 链代替循环——练熟之后,处理集合的效率会有质的提升。
评论 0
还没有评论,来抢沙发吧~ 🛋