📝 182 字 · ☕ 1 分钟阅读
前言
在日常开发中,我们经常需要从集合中筛选、排序、分组数据。在 C# 中,LINQ(Language Integrated Query)提供了一套优雅的解决方案,让数据查询代码既简洁又易读。本文通过三个实战场景,带你快速掌握 LINQ 的查询语法。
环境准备
确保项目支持 .NET 6+ 以及 System.Linq 命名空间(默认引用)。
// 不需要额外安装 NuGet 包
using System;
using System.Collections.Generic;
using System.Linq;
场景一:筛选与排序
从一个员工列表中筛选出薪资大于 8000 的研发人员,按薪资降序排列。
var employees = new List
{
new() { Name = "张三", Dept = "研发", Salary = 15000 },
new() { Name = "李四", Dept = "研发", Salary = 9000 },
new() { Name = "王五", Dept = "市场", Salary = 12000 },
new() { Name = "赵六", Dept = "研发", Salary = 7500 },
};
var result = from e in employees
where e.Salary > 8000 && e.Dept == "研发"
orderby e.Salary descending
select e;
foreach (var e in result)
Console.WriteLine($"{e.Name} - {e.Salary}");
// 输出:张三 - 15000 李四 - 9000
场景二:分组与聚合
按部门统计总薪资支出,并计算各部门平均薪资。
var stats = from e in employees
group e by e.Dept into g
select new
{
Department = g.Key,
TotalSalary = g.Sum(e => e.Salary),
AvgSalary = g.Average(e => e.Salary),
Count = g.Count()
};
foreach (var s in stats)
Console.WriteLine($"{s.Department} | 人数:{s.Count} | 总额:{s.TotalSalary} | 均薪:{s.AvgSalary:F0}");
场景三:多集合关联(类似 SQL JOIN)
将员工表与部门表进行关联查询,输出员工姓名及所在部门的全称。
var departments = new List
{
new() { Code = "R&D", FullName = "研发中心" },
new() { Code = "MKT", FullName = "市场部" },
};
var query = from e in employees
join d in departments on e.Dept equals d.Code
select new { e.Name, d.FullName };
foreach (var item in query)
Console.WriteLine($"{item.Name} - {item.FullName}");
总结
- LINQ 查询语法(
from...where...select)对 SQL 背景的开发者非常友好 - 支持链式方法语法(
.Where().OrderBy()),两种风格可混用 - 核心操作:筛选(where)、排序(orderby)、分组(group by)、关联(join)
- 延迟执行:只有在遍历(foreach / .ToList())时才真正查询数据