C#:LINQ学习笔记01:LINQ基础概念
一、LINQ 架构体系
1. LINQ 的核心思想
- 统一查询模型:对对象、XML、数据库等不同数据源使用一致的语法。
- 强类型检查:编译时类型安全,减少运行时错误。
2. 核心组件
| 技术 | 数据源 | 典型场景 |
|---|---|---|
| LINQ to Objects | 内存集合 (IEnumerable) | 过滤/排序集合数据 |
| LINQ to XML | XML 文档 | 解析/查询 XML 节点 |
| LINQ to SQL | 关系数据库 | 将查询翻译为 SQL 执行 |
关键代码示例:
// LINQ to Objects
var numbers = new List<int> { 1, 2, 3 };
var query = numbers.Where(n => n > 1);// LINQ to XML
XDocument doc = XDocument.Load("data.xml");
var elements = doc.Descendants("Book").Where(x => (int)x.Element("Price") > 50);// LINQ to SQL(伪代码)
var db = new DataContext();
var users = db.Users.Where(u => u.Age > 18);
二、查询表达式 vs 方法语法
1. 本质区别
- 查询表达式:类 SQL 语法(
from...where...select),可读性高。 - 方法语法:链式调用扩展方法(
Where()/Select()),灵活性更强。
2. 转换关系
所有查询表达式会被编译器翻译为方法语法。
代码对比:
// 查询表达式
var query1 = from num in numbers where num % 2 == 0 select num * 2;// 方法语法
var query2 = numbers.Where(num => num % 2 == 0).Select(num => num * 2);
三、IEnumerable 接口解析
1. 核心机制
IEnumerable:定义迭代能力(通过GetEnumerator())。IEnumerator:实现遍历逻辑(MoveNext()和Current)。
2. LINQ 的延迟执行
- 查询定义时不执行,直到迭代结果(如
foreach或ToList())时才触发。
代码验证延迟执行:
var numbers = new List<int> { 1, 2, 3 };
var query = numbers.Select(n => {Console.WriteLine($"Processing {n}");return n * 2;
});// 此时无输出
foreach (var num in query) { } // 输出:Processing 1, Processing 2, Processing 3
四、创建首个 LINQ 查询(三步法)
1. 定义数据源
var products = new List<Product> {new Product { Name = "Apple", Price = 15 },new Product { Name = "Laptop", Price = 5000 },new Product { Name = "Book", Price = 80 }
};
2. 编写查询
// 方法语法
var expensiveProducts = products.Where(p => p.Price > 100).OrderBy(p => p.Name);
3. 执行查询
foreach (var product in expensiveProducts)
{Console.WriteLine(product.Name);
}
五、练习:集合过滤与投影
任务 1:过滤数据
// 数据源
var numbers = Enumerable.Range(1, 100);// 目标:选出 3 的倍数且大于 50 的数字
var result = numbers.Where(n => n % 3 == 0 && n > 50);
任务 2:投影转换
// 数据源
var persons = new List<Person> { /* 包含姓名和年龄的对象 */ };// 目标:生成 { Name = "张三", Initial = 'Z' } 形式的新对象
var initials = persons.Select(p => new {Name = p.Name,Initial = p.Name[0]
});
六、扩展思考
- 如何通过
yield return自定义一个延迟执行的 LINQ 操作? IQueryable和IEnumerable在查询数据库时的区别?- 如何组合
Where().OrderBy().Select()实现复杂查询?
相关文章:
C#:LINQ学习笔记01:LINQ基础概念
一、LINQ 架构体系 1. LINQ 的核心思想 统一查询模型:对对象、XML、数据库等不同数据源使用一致的语法。强类型检查:编译时类型安全,减少运行时错误。 2. 核心组件 技术数据源典型场景LINQ to Objects内存集合 (IEnumerable)过滤/排序集合…...
15Metasploit框架介绍
metasploit目录结构 MSF ——the metasploit framework 的简称。MSF高度模块化,即框架结构由多个module组成,是全球最受欢迎的工具 是一筐开源安全漏洞利用和测试工具,集成了各种平台上常见的溢出漏洞和流行sheellcode,并且保持…...
NLP如何训练AI模型以理解知识
一、自然语言处理(NLP)的定义与核心目标 1. 什么是自然语言处理? NLP是计算机科学与人工智能的交叉领域,旨在让机器具备以下能力: • 理解:解析人类语言(文本或语音)的语法、语义和…...
【树莓派学习】树莓派3B+的安装和环境配置
【树莓派学习】树莓派3B的安装和环境配置 文章目录 【树莓派学习】树莓派3B的安装和环境配置一、搭建Raspberry Pi树莓派运行环境1、下载树莓派镜像下载器2、配置wifi及ssh3、SSH访问树莓派1)命令行登录2)远程桌面登录3)VNC登录(推…...
python连接neo4j的方式汇总
python连接neo4j的方式汇总 1.官方驱动(neo4j)特点代码示例 2. 全功能ORM(py2neo)特点代码示例 3. 领域驱动设计框架(neomodel-odm)特点代码示例 4. 异步高性能驱动(asyncneo4j)特点…...
Graph RAG 迎来记忆革命:“海马体”机制让问答更精准!
随着生成式 AI 技术的快速发展,RAG(Retrieval-Augmented Generation)和 Agent 成为企业应用大模型的最直接途径。然而,传统的 RAG 系统在准确性和动态学习能力上存在明显不足,尤其是在处理复杂上下文和关联性任务时表现不佳。近期,一篇论文提出了 HippoRAG 2,这一新型 R…...
Spring(三)容器-注入
一 自动注入Autowire 代码实现: package org.example.spring01.service;import org.springframework.stereotype.Service;Service public class UserService {}package org.example.spring01.controller;import lombok.Data; import lombok.ToString; import org.…...
剧本杀门店预约小程序:市场发展下的刚需
在剧本杀爆发式增长下,门店数字化运营的模式正在市场中逐渐展开,线下门店的竞争方向已发生了全新转变! 目前,数字化发展已经成为了消费市场的刚需,利用网络的便捷性提高服务,优化运营,提高自身…...
stable-diffusion-webui 加载模型文件
背景 stable-diffusion-webui 安装完毕后,默认的模型生成的效果图并不理想,可以根据具体需求加载指定的模型文件。国内 modelscope 下载速度较快,以该站为例进行介绍 操作步骤 找到指定的模型文件 在 https://modelscope.cn/models 中查找…...
Ubuntu20.04双系统安装及软件安装(十一):向日葵远程软件
Ubuntu20.04双系统安装及软件安装(十一):向日葵远程软件 打开向日葵远程官网,下载图形版本: 在下载目录下打开终端,执行: sudo dpkg -i SunloginClient(按tab键自动补全)出现报错: …...
华为云 | 快速搭建DeepSeek推理系统
DeepSeek(深度求索)作为一款国产AI大模型,凭借其高性能、低成本和多模态融合能力,在人工智能领域崛起,并在多个行业中展现出广泛的应用潜力。 如上所示,在华为云解决方案实践中,华为云提供的快速…...
printf 与前置++、后置++、前置--、后置-- 的关系
# 前置和前置-- 先看一段代码 大家是不是认为printf输出的是 2 3 3 2 1 1 但是实际输出的是 3 3 3 1 1 1 在这两行printf函数代码里,编译器会先计算 a 和 --a 的值,然后再 从右向左 开始输出。 printf函数中,如果有多个…...
centos7操作系统下安装docker,及查看docker进程是否启动
centos7下安装docker,需要用到的yun命令 (yum命令用于添加卸载程序) 1.设置仓库: yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2.安装 Docker Engine-Community yum in…...
【向量数据库Weaviate】 和Elasticsearch的区别
Weaviate 和 Elasticsearch 是两种不同类型的数据库,设计目标和应用场景有显著差异。以下是它们的核心区别和适用场景的详细对比: 1. 设计目标与核心能力 维度WeaviateElasticsearch核心能力向量数据库 图数据库(语义搜索优先)全…...
深度学习-大白话解释循环神经网络RNN
目录 一、RNN的思想 二、RNN的基本结构 网络架构 关键点 三、RNN的前向传播 四、RNN的挑战:梯度爆炸和梯度消失 问题分析 示例推导 五、LSTM:RNN的改进 核心组件 网络架构 3. LSTM 的工作流程 4. 数学公式总结 5. LSTM 的优缺点 优点 缺点 6. LSTM 的…...
python3.13安装教程【2025】python3.13超详细图文教程(包含安装包)
文章目录 前言一、python3.13安装包下载二、Python 3.13安装步骤三、Python3.13验证 前言 本教程将为你详细介绍 Python 3.13 python3.13安装教程,帮助你顺利搭建起 Python 3.13 开发环境,快速投身于 Python 编程的精彩实践中。 一、python3.13安装包下…...
RocketMQ的运行架构
目录 1. 核心组件(1) NameServer(2) Broker(3) Producer(4) Consumer 2. 消息流转流程3. 高可用机制4. 扩展性与负载均衡5.容错机制5. 特殊功能支持6. 典型部署架构总结 RocketMQ 是一款高性能、高可靠的分布式消息中间件,其运行架构设计为分布式、可扩展、高可用的…...
SLAM文献之-DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras
DROID-SLAM 是一种结合深度学习与传统视觉SLAM技术的先进算法,其核心目标是通过端到端可训练的深度神经网络来实现高精度的相机位姿估计和稠密三维重建。与传统SLAM方法不同,DROID-SLAM采用深度学习网络来估计深度信息,提供更高的精度与鲁棒性…...
nano 是 Linux 系统中的一个 命令行文本编辑器
nano 是 Linux 系统中的一个 命令行文本编辑器,用于在终端中直接编辑文本文件。它相比 vi 或 vim 更加简单易用,适合新手操作。 具体解释: 在你给出的命令 sudo nano /etc/nfs.conf 中: sudo:以管理员权限运行命令&a…...
JAVA毕设项目-基于SSM框架的百色学院创新实践学分认定系统源码+设计文档
文末获取源码数据库文档 感兴趣的可以先收藏,有毕设问题,项目以及论文撰写等问题都可以和博主沟通,尽最大努力帮助更多的人! 百色学院创新实践学分认定系统设计与实现 摘 要 本百色学院创新实践学分认定系统是针对目前实践学分认定…...
RT-Thread USB HID设备数据发送失败排查:ops参数与报告ID的深度解析
1. 问题背景与核心需求解析 最近在捣鼓RT-Thread,想用它来实现一个USB HID设备,完成和电脑之间的双向数据收发。HID,也就是人机接口设备,大家最熟悉的可能就是键盘鼠标了,它的好处是免驱动,在主流操作系统…...
如何快速掌握LRC Maker:新手制作精准同步歌词的完整指南
如何快速掌握LRC Maker:新手制作精准同步歌词的完整指南 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 在数字音乐时代,你是否曾想为自己喜…...
良品铺子卖菜:OEM模式的极限与宿命
一家卖零食的公司开始卖菜,听起来像是一个关于“内卷”的黑色幽默。2026年5月,良品铺子在武汉开出首家“良品铺子鲜生活”超市。这家门店不再陈列整齐的包装零食,而是摆上了新鲜蔬菜、现制熟食、现烤面包和冷藏冷冻品。公司将其定位为“社区厨…...
wpa_ctrl接口简介和使用总结
参考: wpa_supplicant简介与基础使用总结-CSDN博客 wpa_cli核心操作总结-CSDN博客 认识wpa_ctrl接口 在嵌入式Linux的C语言开发中,与 wpa_supplicant 交互的标准方法就是使用它官方提供的 wpa_ctrl 接口。这个接口以一组简单的C函数形式提供,…...
告别GitHub!手把手教你用Gitblit在Windows 10上搭建私人局域网Git服务器(附SourceTree配置)
告别GitHub!手把手教你用Gitblit在Windows 10上搭建私人局域网Git服务器(附SourceTree配置) 在当今代码托管平台高度集中的环境下,越来越多的开发者开始关注数据主权和隐私保护。特别是对于金融、医疗等敏感行业的开发团队&#x…...
别再手动搭后台了!用vue-admin-template + SpringBoot 30分钟搞定讲师管理模块
别再手动搭后台了!用vue-admin-template SpringBoot 30分钟搞定讲师管理模块 在快节奏的互联网开发中,后台管理系统的高效搭建一直是开发者面临的痛点。传统方式从零开始构建,不仅需要处理路由配置、权限管理、UI组件等基础架构,…...
【免费下载】 C小项目分享(22个)亲测可运行
C#小项目分享(22个)亲测可运行 【下载地址】C小项目分享22个亲测可运行 C#小项目分享(22个)亲测可运行 项目地址: https://gitcode.com/open-source-toolkit/73645 资源介绍 本仓库提供了一个包含22个C#小项目的资源文件,所有项目均经过亲测,确保…...
OpCore-Simplify:30分钟完成专业级黑苹果配置的终极指南
OpCore-Simplify:30分钟完成专业级黑苹果配置的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而烦恼吗&…...
ARM1176JZF芯片架构与时钟管理深度解析
1. ARM1176JZF芯片架构概览 ARM1176JZF是ARMv6架构中的经典处理器内核,广泛应用于嵌入式系统和移动设备。这款芯片采用了先进的流水线设计和动态时钟调节技术,在性能与功耗之间实现了出色的平衡。开发芯片版本特别集成了完整的调试功能和性能监控单元&am…...
Linux用户必备的三大翻译神器:CuteTranslation如何解决多语言工作难题
Linux用户必备的三大翻译神器:CuteTranslation如何解决多语言工作难题 【免费下载链接】CuteTranslation Linux屏幕取词翻译软件 项目地址: https://gitcode.com/gh_mirrors/cu/CuteTranslation 对于长期在Linux环境下工作的开发者、研究人员和学生来说&…...
