linq 用声明式语法替代循环,提升可读性;核心是掌握 where/select(筛选与投影)、orderby/skip/take(排序分页)、count/any/all(聚合判断)、distinct/union/except/intersect(集合操作),且具延迟执行特性。

用 LINQ 查询集合,核心是用声明式语法替代传统 for/foreach 循环,让代码更简洁、可读性更高。重点不是记所有方法,而是掌握常用查询操作符和它们的适用场景。
基础查询:where + select 最常用
筛选加投影是最常见的组合。where 过滤元素,select 提取或转换数据。
- where 接布尔表达式,返回满足条件的元素;支持链式调用多个 where(等价于 AND)
- select 可返回原对象、新匿名对象、单一属性,甚至做简单计算
示例:
var adults = people.Where(p => p.Age >= 18).Select(p => new { p.Name, p.Age });排序与分页:orderby + Skip/Take
orderby 默认升序,加 descending 可降序;多级排序用逗号分隔;Skip 和 Take 常用于分页。
- orderby p.Age descending, p.Name 升序排姓名(同年龄时)
- Take(10) 取前10条;Skip(20).Take(10) 表示第3页(每页10条)
注意:Skip/Take 在数据库查询中会转成 SQL 的 OFFSET/FETCH,但对内存集合会先加载再跳过,大数据量慎用。
聚合与判断:Count/Sum/Any/All
这些方法直接返回单个值,不返回 IEnumerable
- Count() 返回总数;Count(x => x.IsActive) 统计满足条件的数量
- Any() 判断是否存在匹配项(比 Count > 0 更高效,找到第一个就返回)
- All() 判断是否全部满足条件;Sum/Max/Min/Average 适用于数值类型
示例:bool hasAdmin = users.Any(u => u.Role == "Admin");
集合操作:Distinct/Union/Except/Intersect
处理重复或比较两个集合时很实用,都基于默认相等比较器(或自定义 IEqualityComparer)。
- Distinct() 去重;对引用类型需重写 Equals/GetHashCode 或传入比较器
- Union() 并集(自动去重);Intersect() 交集;Except() 差集(左有右无)
示例:var allTags = post1.Tags.Union(post2.Tags);
基本上就这些。LINQ 查询本身不执行,直到你调用 ToList()、ToArray()、First() 或遍历 foreach 时才触发(延迟执行)。写的时候多用 var,少想类型,让编译器帮你推导。










