C# LINQ 所有方法详解 + 使用场景(标准查询运算符,分两类:查询语法/方法语法)
LINQ 分为延迟执行惰性和立即执行求值两大类还有聚合、元素、生成、集合修改方法全部附代码示例与适用场景。 底层基于IEnumerableT/IQueryableTEF 数据库查询优先用 IQueryable减少内存加载。一、筛选类延迟执行过滤数据1. Where 条件过滤作用按布尔条件筛选元素场景数据过滤、多条件筛选、数据库条件查询var list new Listint {1,2,3,4,5}; // 筛选大于3 var res list.Where(x x 3); // 4,5 // 带索引重载筛选偶数且索引大于1 var res2 list.Where((x,idx) x%20 idx1);EF 场景db.Users.Where(u u.Age 18 u.Status 1)2. OfType 按类型过滤作用集合中只取出指定类型元素自动忽略不匹配类型场景object 混合集合、控件集合、多态集合筛选IList objects new ArrayList { 1, abc, 2, def }; var strs objects.OfTypestring(); // abc,def二、投影/转换类延迟执行映射字段/对象1. Select 单对象投影映射作用转换每一个元素支持字段提取、对象重组、计算场景DTO 转换、只取需要字段、字段计算var users new ListUser(); // 只取姓名 var names users.Select(u u.Name); // 匿名类 var dto users.Select(u new {u.Id, u.Name, Age u.Birth.Year}); // 带索引 var indexed users.Select((u,i) new {Indexi, u.Name});2. SelectMany 集合扁平化一对多展开作用把集合内嵌套集合展开合并成一维序列场景一对多关系、嵌套列表展开、子集合遍历// 班级-学生 一对多 var classes new ListClass(); // 取出所有学生扁平化 var allStudents classes.SelectMany(c c.Students); // 同时保留父对象 var classStudent classes.SelectMany(c c.Students, (cls,stu)new {cls.Name, stu.Name});三、排序类延迟执行排序1. OrderBy / OrderByDescending 单字段升序/降序场景单一条件排序var asc users.OrderBy(u u.Age); // 年龄升序 var desc users.OrderByDescending(u u.CreateTime); // 创建时间倒序2. ThenBy / ThenByDescending 多字段次级排序作用主排序相同后次要条件排序必须跟在 OrderBy 后场景多维度复合排序// 先按年龄升序同龄按分数降序 var sort users.OrderBy(uu.Age).ThenByDescending(uu.Score);四、分区截取类延迟执行取部分数据1. Take(n) 取前 N 条场景分页首页、TopN 数据、限制返回条数var top3 list.Take(3); // 前3个2. TakeWhile 满足条件就持续取遇到不满足立刻停止场景连续符合条件数据截取var nums new Listint{1,2,4,1,5}; var take nums.TakeWhile(xx3); // 1,2到4停止3. Skip(n) 跳过前 N 条场景分页Skip((page-1)*size).Take(size)var page2 list.Skip(2).Take(3); // 跳过2条取3条4. SkipWhile 跳过满足条件元素直到不满足开始取值var skip nums.SkipWhile(xx3); // 4,1,5五、集合去重/对比延迟执行1. Distinct 去重场景获取不重复数据、枚举唯一值var arr new int[]{1,1,2,2,3}; var unique arr.Distinct(); // 1,2,3 // 自定义比较器复杂对象去重 var userDistinct users.Distinct(new UserNameComparer());2. Except 差集A有B没有的元素场景对比两个集合找出差异数据var a new Listint{1,2,3}; var b new Listint{3,4,5}; var diff a.Except(b); // 1,23. Intersect 交集两者都存在的元素场景共同数据筛选、权限交集匹配var same a.Intersect(b); // 34. Union 并集自动去重场景合并两个集合去除重复var all a.Union(b); // 1,2,3,4,55. Concat 简单拼接不去重场景单纯合并允许重复var concat a.Concat(b); // 1,2,3,3,4,5六、元素获取方法立即执行返回单个元素无匹配抛异常1. First() / FirstOrDefault()First()取第一个元素空集合抛异常FirstOrDefault()无数据返回类型默认值null/0 场景查询单条数据、第一条匹配记录var first users.Where(uu.Id1).FirstOrDefault();2. Last() / LastOrDefault()取序列最后一条数据库 IQueryable 慎用全查再取尾3. Single() / SingleOrDefault()Single只能有一条匹配多/无都报错 SingleOrDefault匹配0条返回默认多条报错 场景唯一主键查询Id主键确保只有一条数据var user db.Users.SingleOrDefault(uu.Id 1001);4. ElementAt(index) / ElementAtOrDefault(index)按索引取元素越界抛异常 / 返回默认 场景已知下标取值七、聚合函数立即执行返回数值1. Count() 统计总数无参数全部数量带条件Count(xx0)统计符合条件数量 场景分页总条数、条件计数int total users.Count(u u.Age 18);2. LongCount() 返回 long 类型计数超大集合3. Sum 求和数字集合求和支持投影Sum(xx.Score)int totalScore users.Sum(u u.Score);4. Min / Max 最小/最大值int maxAge users.Max(u u.Age); int minScore users.Min(u u.Score);5. Average 平均值仅数值类型可用double avgAge users.Average(u u.Age);6. Aggregate 自定义聚合万能累加器场景复杂合并、字符串拼接、自定义运算var nums new Listint{1,2,3,4}; // 累加 1234 int sum nums.Aggregate((acc,cur)acccur); // 带初始值拼接字符串 string str nums.Aggregate(0, (s,x)sx);八、判断存在性立即执行返回 bool1. Any() 是否存在至少一条数据无参数集合不为空带条件是否有满足条件元素推荐优先用 Any 判断存在性能优于 Count0bool hasAdult users.Any(u u.Age 18);2. All() 全部元素都满足条件场景批量校验数据合规性bool allPass users.All(u u.Score 60);3. Contains() 是否包含指定元素基础类型直接传值复杂对象需自定义比较器var list new Listint{1,2,3}; bool exist list.Contains(2);九、转换类型方法立即执行转为固定容器1. ToList() 转为 List最常用将 IEnumerable 加载到内存断开延迟执行 场景查询后多次遍历、修改集合、EF 查询落地内存var list db.Users.Where(uu.Age18).ToList();2. ToArray() 转为 T[] 数组3. ToDictionary(keySelector, valueSelector) 转字典场景主键快速索引Id映射实体var userDict users.ToDictionary(kk.Id, vv.Name);4. ToLookup() 多键一对多字典ILookup一个键对应多个值分组专用 场景按类别分组并快速索引var ageGroup users.ToLookup(u u.Age); var age20 ageGroup[20]; // 所有20岁用户5. AsEnumerable() / AsQueryable()AsQueryable()IEnumerable 转 IQueryable支持LINQ表达式树AsEnumerable()强制切换为内存LINQ数据库查询中局部处理 场景EF中部分逻辑无法转SQL强制内存计算十、分组方法 GroupBy延迟执行GroupBy 分组聚合返回IGroupingTKey,TElement支持多键、投影分组值 场景报表分组、统计分类数据// 单键分组按年龄分组 var group users.GroupBy(u u.Age); foreach(var g in group) { int age g.Key; int count g.Count(); } // 多键分组匿名类复合键 var multiGroup users.GroupBy(u new {u.Age, u.Gender}); // 分组同时映射元素 var groupName users.GroupBy(uu.Age, uu.Name);十一、生成序列方法无数据源创建集合延迟1. Range(start, count) 生成连续数字var nums Enumerable.Range(1,10); // 1~102. Repeat(value, count) 重复生成指定值var fiveZero Enumerable.Repeat(0,5);3. Empty() 返回空 IEnumerable场景方法返回IEnumerable无数据时避免null十二、zip 配对合并序列延迟Zip 将两个序列按位置一一配对长度取最短场景两个列表一一对应合并var a new Listint{1,2,3}; var b new Liststring{a,b,c}; var zip a.Zip(b,(x,y)new{Numx,Stry});关键核心知识点1. 延迟执行 vs 立即执行 区分延迟仅定义查询遍历才执行Where/Select/SelectMany/OrderBy/Take/Skip/Distinct/GroupBy/Concat/Union/Except/Intersect/Zip/OfType 优点多次拼接查询只会执行一次EF 可拼接SQL优化立即调用时直接执行查询加载数据ToList/ToArray/ToDictionary/Count/Sum/Min/Max/Average/Aggregate/First/Any/All/Single/Contains 一旦调用SQL/内存计算立刻执行结果存入容器2. IQueryable VS IEnumerable 使用场景数据库查询EF Core优先 IQueryableWhere/Select/Take 会翻译为SQL只拉取需要数据性能高复杂逻辑无法转SQL本地方法、自定义函数加.AsEnumerable()切换内存LINQ内存集合List/Array只能用 IEnumerable3. 高频业务场景速查表需求推荐LINQ方法分页Skip Take CountDTO转换Select 匿名类/实体一对多展开SelectMany主键查单条SingleOrDefault判断数据存在Any()分组统计GroupBy Count/Sum去重Distinct集合对比差异Except/Intersect/Union多条件排序OrderBy ThenBy列表转字典索引ToDictionary内存落地查询结果ToList()4. 避坑提醒IQueryable 不要在循环内多次 ToList()会重复查库First()/Single() 无数据抛异常业务统一用 *OrDefaultOrderBy 后必须 ThenBy不能连续两个 OrderBy后者覆盖前者Count() 0 性能远差于 Any()判断存在一律 AnyEF 中 Last() 会拉取全表再取最后一条大数据禁用改用 OrderByDescending FirstOrDefault

相关新闻

Timeline Scan:精准标注照片日期,让家庭照片有序整理不再难!

Timeline Scan:精准标注照片日期,让家庭照片有序整理不再难!

Timeline Scan:家庭照片整理神器各位,如果你已经是 Timeline Scan 的用户,可直接登录仪表盘。Timeline Scan 能实现家庭照片的数字化、标注日期和有序整理。其官网有主页、定价、常见问题解答、关于我们、联系我们、照片扫描等板块。为家庭照…

2026/7/18 16:33:45阅读更多 →
企业知识管理困境破解:金曲AI知识库落地实践分享

企业知识管理困境破解:金曲AI知识库落地实践分享

很多企业在数字化转型过程中,普遍面临知识管理难题:技术文档、行业规范、项目资料分散存放,资料查找低效、知识复用率低。同时,内部知识沉淀混乱、权限管控薄弱,跨部门共享困难,公有云AI工具还存在数据外泄…

2026/7/18 16:33:45阅读更多 →
微信聊天记录本地化备份解决方案:实现个人数据自主管理

微信聊天记录本地化备份解决方案:实现个人数据自主管理

微信聊天记录本地化备份解决方案:实现个人数据自主管理 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…

2026/7/18 16:33:45阅读更多 →
从间断巡检到连续感知:GNSS如何赋能桥梁结构健康监测

从间断巡检到连续感知:GNSS如何赋能桥梁结构健康监测

摘要我国公路、铁路、城市立交桥梁存量规模稳居世界前列,大量服役桥梁常年承受往复车流荷载、四季温变、强风侵蚀、混凝土碳化与钢筋锈蚀耦合作用,主梁、桥塔、支座持续产生毫米级累积形变,长期演化极易诱发裂缝、不均匀沉降、支座滑移等安全…

2026/7/18 17:39:50阅读更多 →
计算机毕业设计之视频影音后台管理系统设计与实现

计算机毕业设计之视频影音后台管理系统设计与实现

视频影音后台管理系统设计与实现采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,JSP技术,使用了SSM框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改&a…

2026/7/18 17:39:50阅读更多 →
用 Cursor 规则体系约束 AI 行为:根据你的规范和角色设定打造懂你的AI女友助手

用 Cursor 规则体系约束 AI 行为:根据你的规范和角色设定打造懂你的AI女友助手

压缩包:在 Cursor 中长期协作会遇到一个共性问题:规则写得不少,模型的遵守率却不稳定。表现为回答风格漂移、技术方案深度不够、编码规范偶发遗漏。根因通常有三点:上下文稀释——一次性注入的规则过多、过长,模型注意…

2026/7/18 17:39:50阅读更多 →
开题报告可以免费生成的AI论文写作软件有哪些

开题报告可以免费生成的AI论文写作软件有哪些

免费生成开题报告的工具分学术专用工具、通用大模型、轻量辅助工具三类,以下是 2026 年 7 月实测可用的免费 / 限免工具,附核心功能、免费额度与适用场景,可直接落地。一、免费开题报告生成工具汇总(按场景分类) 工具名…

2026/7/18 17:39:50阅读更多 →
BBPlayer 可以听的B站HiRes Bilibili无损音频播放器 B站链接解析安卓听歌APP

BBPlayer 可以听的B站HiRes Bilibili无损音频播放器 B站链接解析安卓听歌APP

BBPlayer 可以听的B站HiRes Bilibili无损音频播放器 B站链接解析安卓听歌APP BBPlayer最新版:专为B站音频打造的音乐播放器。免费且无广告。实测支持安卓手机平板和车机 这款软件的主要功能和特点如下: 核…

2026/7/18 17:39:50阅读更多 →
AI Agent 自动化运维:一个人+一个Agent,同时管理100+服务器,零手工!

AI Agent 自动化运维:一个人+一个Agent,同时管理100+服务器,零手工!

🚀 AI Agent 自动化运维:一个人一个Agent,同时管理100服务器,零手工!💡 核心洞察:传统运维靠人堆,AI Agent时代靠"智能体工作流"。本文分享如何用AI Agent实现724小时无人…

2026/7/18 17:37:49阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/18 10:49:13阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/18 8:49:08阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/18 14:49:24阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →