当前位置: 首页 > article >正文

Asp.net Mvc教学:LINQ to Objects和 LINQ to Entities的经典案例-由Deepseek产生

下面分别给出LINQ to Objects操作内存集合和LINQ to Entities通过 EF Core 操作数据库的 4 个典型案例。案例使用 C# 编写并附带简要说明。一、LINQ to Objects4 个案例适用于ListT,T[],IEnumerableT等内存中的集合。案例 1筛选Where与投影Select场景从学生列表中找出成绩大于 80 分的男生只返回姓名和成绩。publicclassStudent{publicstringName{get;set;}publicintScore{get;set;}publicstringGender{get;set;}}voidMain(){ListStudentstudentsnewListStudent{newStudent{Name张三,Score85,Gender男},newStudent{Name李四,Score92,Gender男},newStudent{Name王芳,Score78,Gender女},newStudent{Name赵磊,Score88,Gender男}};varresultstudents.Where(ss.Score80s.Gender男).Select(snew{s.Name,s.Score});foreach(variteminresult)Console.WriteLine(${item.Name}-{item.Score});// 输出张三 - 85, 李四 - 92, 赵磊 - 88}案例 2排序OrderBy / ThenBy场景按成绩降序排列成绩相同则按姓名升序。varsortedstudents.OrderByDescending(ss.Score).ThenBy(ss.Name);foreach(varsinsorted)Console.WriteLine(${s.Name}:{s.Score});案例 3分组GroupBy场景按性别分组统计每组人数和平均分。vargroupsstudents.GroupBy(ss.Gender).Select(gnew{Genderg.Key,Countg.Count(),AvgScoreg.Average(xx.Score)});foreach(vargingroups)Console.WriteLine(${g.Gender}共{g.Count}人平均分{g.AvgScore:F1});案例 4连接Join场景两个集合学生表和班级表通过班级 ID 连接显示学生及其班级名称。publicclassStudentWithClassId{publicstringName{get;set;}publicintClassId{get;set;}}publicclassClass{publicintId{get;set;}publicstringName{get;set;}}voidMain(){ListStudentWithClassIdstudentsnewListStudentWithClassId{newStudentWithClassId{Name张三,ClassId1},newStudentWithClassId{Name李四,ClassId2},};ListClassclassesnewListClass{newClass{Id1,Name一班},newClass{Id2,Name二班}};varjoinedstudents.Join(classes,studentstudent.ClassId,clscls.Id,(student,cls)new{student.Name,ClassNamecls.Name});foreach(variteminjoined)Console.WriteLine(${item.Name}属于{item.ClassName});}二、LINQ to Entities4 个案例假设使用Entity Framework Core上下文为SchoolDbContext包含DbSetStudent和DbSetClass。查询会被翻译成 SQL 执行。案例 1筛选与投影场景查询数据库中成绩大于 80 分的男生只返回姓名和成绩。using(varcontextnewSchoolDbContext()){varresultcontext.Students.Where(ss.Score80s.Gender男).Select(snew{s.Name,s.Score}).ToList();// 此时执行 SQLforeach(variteminresult)Console.WriteLine(${item.Name}-{item.Score});}案例 2排序 取前 N 条场景按成绩降序取前 3 名的学生。using(varcontextnewSchoolDbContext()){vartop3context.Students.OrderByDescending(ss.Score).Take(3).ToList();foreach(varsintop3)Console.WriteLine(${s.Name}:{s.Score});}案例 3分组聚合GroupBy场景按性别分组统计每组人数和最高分。using(varcontextnewSchoolDbContext()){vargroupStatscontext.Students.GroupBy(ss.Gender).Select(gnew{Genderg.Key,Countg.Count(),MaxScoreg.Max(xx.Score)}).ToList();foreach(vargingroupStats)Console.WriteLine(${g.Gender}共{g.Count}人最高分{g.MaxScore});}注意EF Core 会将上述 GroupBy 转换为 SQL 的GROUP BY不会将数据全部拉到内存。案例 4跨表连接Join / Include场景查询学生及其所属班级名称。两种写法方法 A使用 Join类似 SQLusing(varcontextnewSchoolDbContext()){varquerycontext.Students.Join(context.Classes,ss.ClassId,cc.Id,(s,c)new{s.Name,ClassNamec.Name}).ToList();}方法 B使用导航属性推荐如果模型已配置关系// 假设 Student 实体包含 public Class Class { get; set; }varresultcontext.Students.Include(ss.Class)// 避免 N1 问题.Select(snew{s.Name,ClassNames.Class.Name}).ToList();关键区别总结特性LINQ to ObjectsLINQ to Entities数据源内存集合List, Array等数据库通过 EF Core执行方式立即执行委托直接调用延迟执行生成 SQL 语句支持的方法几乎所有 LINQ 运算符受 SQL 限制例如不能随意调用自定义 C# 方法典型终止操作.ToList(),.First(),.Count()等同样需要.ToList()等来触发 SQL 执行掌握这两者基本就能覆盖绝大多数 .NET 日常开发中的数据查询需求。继续补充LINQ to Objects和LINQ to Entities各 4 个新案例避免与上一组重复。一、LINQ to Objects追加 4 例案例 5聚合函数Min, Max, Sum, Average场景对一组订单金额进行计算获取总额、最高金额、最低金额、平均金额。ListdoubleorderAmountsnewListdouble{99.5,150.0,320.8,45.2,270.3};doubletotalorderAmounts.Sum();doublemaxorderAmounts.Max();doubleminorderAmounts.Min();doubleavgorderAmounts.Average();Console.WriteLine($总额{total}最高{max}最低{min}平均{avg:F2});案例 6集合操作Distinct, Union, Intersect, Except场景两个兴趣集合求并集、交集、差集、去重。ListstringgroupAnewListstring{篮球,足球,游泳};ListstringgroupBnewListstring{足球,羽毛球,游泳};varuniongroupA.Union(groupB);// 并集篮球,足球,游泳,羽毛球varintersectgroupA.Intersect(groupB);// 交集足球,游泳varexceptgroupA.Except(groupB);// 差集篮球vardistinctgroupA.Distinct();// 本身去重本例无变化Console.WriteLine($并集{string.Join(,,union)});Console.WriteLine($交集{string.Join(,,intersect)});Console.WriteLine($差集{string.Join(,,except)});案例 7元素操作First, Last, Single 及 OrDefault 版本场景从集合中获取特定位置的元素安全处理空值。ListintnumbersnewListint{10,20,30,40,50};ListintemptyListnewListint();intfirstnumbers.First();// 10intlastnumbers.Last();// 50intfirstEvennumbers.First(nn%200);// 20// 安全版本不存在时返回默认值不抛异常intfirstOrDefaultemptyList.FirstOrDefault();// 0intsingleOrDefaultnumbers.SingleOrDefault(nn100);// 0// Single要求集合中恰好有一个匹配元素intonlyOnenewListint{100}.Single();// 100案例 8量词操作Any, All, Contains场景判断集合中是否存在满足条件的元素或是否全部满足。ListintagesnewListint{18,20,25,17,30};boolhasMinorages.Any(ageage18);// true有17岁boolallAdultages.All(ageage18);// false存在17boolcontains25ages.Contains(25);// trueif(hasMinor)Console.WriteLine(存在未成年人);二、LINQ to Entities追加 4 例仍假设使用 EF Core上下文为AppDbContext实体如Product含Name, Price, Category, CreatedAt、Order等。案例 5模糊查询与日期范围筛选场景查询名称包含“手机”的产品且生产日期在去年全年范围内。using(varcontextnewAppDbContext()){varstartDatenewDateTime(2025,1,1);varendDatenewDateTime(2025,12,31);varproductscontext.Products.Where(pEF.Functions.Like(p.Name,%手机%)p.CreatedAtstartDatep.CreatedAtendDate).ToList();}EF.Functions.Like会被翻译成 SQL 的LIKE比Contains更灵活。案例 6分页Skip Take场景每页显示 10 条商品按价格升序获取第 3 页的数据。intpageNumber3;intpageSize10;using(varcontextnewAppDbContext()){varpagecontext.Products.OrderBy(pp.Price).Skip((pageNumber-1)*pageSize).Take(pageSize).ToList();}案例 7子查询与 Exists用 Any 实现场景查询所有下过订单的客户即客户在 Orders 表中存在关联记录。using(varcontextnewAppDbContext()){// 方法1直接使用 Any 子查询会被翻译为 EXISTSvarcustomersWithOrderscontext.Customers.Where(ccontext.Orders.Any(oo.CustomerIdc.Id)).ToList();// 方法2Join 后 Distinct效率通常不如 AnyvarcustomersWithOrders2context.Customers.Join(context.Orders,cc.Id,oo.CustomerId,(c,o)c).Distinct().ToList();}案例 8多级分组GroupBy 多个字段场景按商品分类和上架年份分组统计每组的商品数量和平均价格。using(varcontextnewAppDbContext()){varquerycontext.Products.GroupBy(pnew{p.Category,Yearp.CreatedAt.Year}).Select(gnew{g.Key.Category,g.Key.Year,Countg.Count(),AvgPriceg.Average(pp.Price)}).OrderBy(rr.Category).ThenBy(rr.Year).ToList();foreach(variteminquery)Console.WriteLine(${item.Category}-{item.Year}{item.Count}件均价{item.AvgPrice:F2});}EF Core 会将CreatedAt.Year翻译为 SQL 的YEAR(CreatedAt)支持常见日期函数。再次总结两组案例的核心区别操作类型LINQ to ObjectsLINQ to Entities自定义方法调用✅ 完全支持如自定义比较器❌ 仅支持 EF Core 映射的函数延迟执行内存中遍历时执行生成 SQLToList()时执行异常处理直接抛出 .NET 异常可能抛出数据库相关异常性能考虑数据量过大时 O(n) 扫描依赖数据库索引和查询优化如果需要更多案例如SelectMany、Zip、ToDictionary等我可以继续提供。

相关文章:

Asp.net Mvc教学:LINQ to Objects和 LINQ to Entities的经典案例-由Deepseek产生

下面分别给出 LINQ to Objects(操作内存集合)和 LINQ to Entities(通过 EF Core 操作数据库)的 4 个典型案例。案例使用 C# 编写,并附带简要说明。一、LINQ to Objects(4 个案例) 适用于 List&l…...

Asp.net Mvc教学: LINQ相关的几大分类的使用率-由Deepseek产生

基于当前(2026年).NET开发生态的实际情况,这五大方法的使用率呈现出非常明显的两极分化趋势。 简单直接地回答:使用率高的只有两个,其他三个使用率极低,属于特定场景工具。 以下是具体的排名与解析&#xf…...

禅论结构量化:通达信可视化分析插件的算法实现与实践应用

禅论结构量化:通达信可视化分析插件的算法实现与实践应用 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 禅论量化分析插件通过算法自动识别K线图中的线段结构和中枢区域,为交易者…...

5分钟搞定B站视频下载:DownKyi哔哩下载姬终极免费方案

5分钟搞定B站视频下载:DownKyi哔哩下载姬终极免费方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#…...

Lobe CLI 工具箱:AI 应用开发者的高效命令行助手

1. 项目概述:一个为AI应用开发者量身打造的命令行工具箱 如果你正在使用 LobeChat 或者其他基于 Lobe SDK 的 AI 应用进行开发,并且经常在终端里敲打各种命令来处理模型管理、会话导出、配置同步这些琐碎但又必不可少的任务,那么你很可能已经…...

FPGA加速的实时细胞分类系统设计与实现

1. 项目概述:FPGA加速的实时细胞分类与分选系统在生物医学研究和临床诊断中,细胞分类是一项基础而关键的技术。传统流式细胞术依赖荧光标记识别细胞表面抗原,这种方法虽然准确,但存在明显局限:每检测一种新标记就需要对…...

6G网络中的流体天线与速率分割多址技术解析

1. 6G网络中的流体天线与速率分割多址技术解析 在移动通信技术快速迭代的今天,6G网络正逐渐从概念走向现实。作为下一代通信系统的核心候选技术,流体天线系统(FAS)与速率分割多址(RSMA)的结合展现出独特的优势。FAS通过动态调整天线位置提供灵活的空间自…...

使用curl命令直接调试Taotoken大模型接口的详细步骤

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用curl命令直接调试Taotoken大模型接口的详细步骤 对于开发者而言,尤其是在无特定语言SDK的环境下,或者需…...

3步解锁百度网盘SVIP极速下载:告别限速困扰的完整指南

3步解锁百度网盘SVIP极速下载:告别限速困扰的完整指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘那蜗牛般的下载速度而…...

开源IM机器人技能框架openclaw-skill-imsg架构解析与实战

1. 项目概述:一个面向即时通讯消息的自动化技能框架最近在折腾一个挺有意思的开源项目,叫openclaw-skill-imsg。光看这个名字,可能有点摸不着头脑,我来拆解一下。openclaw听起来像是一个开源(open)的“爪子…...

C++ 资源操作注意事项(内存、文件、数据库、网络...)

文章目录1. 资源类型2. 资源可变性3. 资源分配策略4. 资源访问权限5. 资源所有权转移6. 资源获取和释放7. 生命周期管理8. 资源有效性检查9. 资源竞争(多线程安全性)10. 资源泄漏防范11. 异常安全性在C中,确保资源的有效和安全管理至关重要。…...

有话直说可以解决90%的误解的庖丁解牛

它的本质是:将高维度的、模糊的、充满噪声的 心理潜台词 (Subtext/Implicit Context),强制降维并编码为低维度的、精确的、无歧义的 显性语言 (Explicit Language)。这是一种 去序列化 (Deserialization) 的过程,旨在消除接收端因“猜测”、“…...

家庭稳定性的具象化的庖丁解牛

它的本质是:家庭不是一个静态的物体,而是一个 动态平衡的复杂自适应系统 (Complex Adaptive System)。其稳定性不取决于“没有冲突”,而取决于系统在遭遇外部冲击(失业、疾病、经济下行)和内部扰动(争吵、代…...

面试之关系型数据库

数据库设计三范式第一范式。任何一张表必须有主键,每一个字段具有原子性不可再分。第二范式。所有非主键字段完全依赖主键字段,不存在部分依赖(复合主键可能存在此情况)。第三范式。所有非主键字段直接依赖于主键字段,…...

高效一键解锁12种加密音乐:Unlock Music免费开源工具完全指南

高效一键解锁12种加密音乐:Unlock Music免费开源工具完全指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址…...

3分钟学会在Windows电脑安装安卓应用:APK Installer完全指南

3分钟学会在Windows电脑安装安卓应用:APK Installer完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows电脑无法直接运行安卓应用而烦恼…...

Midscene.js:2025年AI自动化测试的三大颠覆性突破

Midscene.js:2025年AI自动化测试的三大颠覆性突破 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 你是否还在为跨平台UI自动化测试的复杂性而头疼&am…...

ESP32无人机终极指南:从零开始打造你的开源飞控系统

ESP32无人机终极指南:从零开始打造你的开源飞控系统 【免费下载链接】esp-drone Mini Drone/Quadcopter Firmware for ESP32 and ESP32-S Series SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-drone 你是否梦想过亲手打造一架能够稳定飞行、…...

告别混乱!用SAP策略组精细化管理ETO项目需求:从PS策略到MRP运行的完整指南

SAP ETO项目需求管理的策略组实战:从配置到MRP的完整链路解析 在复杂产品制造领域,按订单设计(ETO)模式的项目管理常常面临需求传递断层、物料计划与项目进度脱节等典型痛点。当一台需要分阶段交付的定制化工业电脑涉及数百个零部…...

Dev-GPT部署指南:简单三步将你的微服务推向Jina云平台

Dev-GPT部署指南:简单三步将你的微服务推向Jina云平台 【免费下载链接】dev-gpt Your Virtual Development Team 项目地址: https://gitcode.com/gh_mirrors/de/dev-gpt Dev-GPT是一款强大的虚拟开发团队工具,能够帮助开发者快速构建和部署微服务…...

网站设计+开发一站式服务商推荐:2026老客户口碑网站建设公司盘点

在数字化转型进入深水区的当下,企业网站已从基础信息展示窗口升级为品牌塑造、营销获客与业务转化的核心枢纽,成为企业抢占市场先机的关键竞争力。然而,网站建设市场服务水平参差不齐,70%的企业曾遭遇技术过时、售后断层等问题。为…...

告别Anchor和NMS!用DETR在NWPU遥感数据集上跑出88%AP的保姆级教程

告别Anchor和NMS!用DETR在NWPU遥感数据集上跑出88%AP的保姆级教程 遥感图像目标检测一直是计算机视觉领域的重要研究方向,但传统方法如Faster R-CNN和YOLO系列在处理遥感目标时存在诸多限制。本文将带你深入了解DETR(Detection with Transformers)这一革…...

别再只盯着增益带宽积了!用RC低通/高通模型,手把手分析你运放电路不稳定的根源

别再只盯着增益带宽积了!用RC低通/高通模型,手把手分析你运放电路不稳定的根源 调试运放电路时,你是否遇到过这样的场景:明明按照增益带宽积(GBW)计算应该稳定的电路,上电后却出现难以解释的振荡…...

Speechless:一键永久保存你的微博记忆,免费导出高质量PDF

Speechless:一键永久保存你的微博记忆,免费导出高质量PDF 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在数字记忆日益珍贵…...

别再只调参数了!深入理解Pure Pursuit:从几何原理到ROS中lookahead_distance的实战影响分析

别再只调参数了!深入理解Pure Pursuit:从几何原理到ROS中lookahead_distance的实战影响分析 当你的机器人在弯道上反复震荡,或者像醉汉一样切弯时,盲目调整参数就像在黑暗中摸索——你可能偶然找到解决方案,但永远无法…...

MikroTikPatch多架构支持:x86、ARM、MIPS平台完全攻略

MikroTikPatch多架构支持:x86、ARM、MIPS平台完全攻略 【免费下载链接】MikroTikPatch MikroTik RouterOS Patch Public Key and Generate License 项目地址: https://gitcode.com/gh_mirrors/mikr/MikroTikPatch MikroTikPatch是一款针对MikroTik RouterOS的…...

智能体开发实战:从LLM工具调用到自主决策系统的架构指南

1. 项目概述与核心价值最近在开源社区里,一个名为DaMaxime/openclaw-agents-docs的项目引起了我的注意。乍一看,这像是一个围绕“OpenClaw Agents”的文档仓库,但当你深入进去,会发现它远不止是简单的API手册或使用说明。这个项目…...

Windows平台APK安装终极指南:5分钟快速上手安卓应用

Windows平台APK安装终极指南:5分钟快速上手安卓应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows电脑无法直接安装安卓应用而烦恼吗&#…...

Awesome-Xamarin快速入门:10分钟掌握最实用的Xamarin开发工具

Awesome-Xamarin快速入门:10分钟掌握最实用的Xamarin开发工具 【免费下载链接】awesome-xamarin A collection of interesting libraries/tools for Xamarin mobile projects 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-xamarin 想要快速提升Xam…...

自动化技能备份库的安全分析与工程实践指南

1. 项目概述与核心定位最近在整理一些自动化工具和脚本时,我又翻出了这个叫openclaw/skills的仓库。这其实是一个挺有意思的“数字档案馆”,它的主要作用是把一个特定平台上的“技能”(Skills)给备份下来。简单来说,你…...