C# LINQ 实战:用查询语法搞定数据集合操作

📝 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())时才真正查询数据

📤 分享这篇文章