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

C#20、什么是LINQ

在 C# 中,LINQ(Language Integrated Query,语言集成查询) 是 .NET 提供的一套强大而统一的数据查询语法,让你可以用类似 SQL 的方式,直接在 C# 代码中查询各种数据源(如数组、列表、数据库、XML 等)。

它的核心思想是:“用同一种方式查询不同来源的数据”


✅ 为什么需要 LINQ?

在没有 LINQ 的时代:

  • 查数组要用 for 循环
  • 查数据库要用 SQL 字符串
  • 查 XML 要用 DOM 或 XPath

👉 每种数据源都有不同的查询方式,学习成本高,代码不统一。

LINQ 解决了这个问题:无论数据在哪,查询语法都一样!


✅ LINQ 能查哪些数据?

只要数据实现了 IEnumerable<T>(内存集合)或 IQueryable<T>(远程数据源,如数据库),就可以用 LINQ 查询:

数据源类型示例
内存集合List<T>, Array, Dictionary
数据库Entity Framework(EF Core)、LINQ to SQL
XMLLINQ to XML
其他自定义支持 IEnumerable<T> 的类型

✅ 两种 LINQ 语法

1. 查询表达式语法(Query Syntax) —— 类似 SQL

var result = from num in numberswhere num > 5orderby num descendingselect num;

2. 方法语法(Method Syntax / Fluent Syntax) —— 基于扩展方法(更常用)

var result = numbers.Where(num => num > 5).OrderByDescending(num => num);

💡 两者功能等价,编译后都会转成方法调用。方法语法更灵活,使用更广泛。


✅ 常见 LINQ 操作示例(以内存列表为例)

假设有一个学生列表:

var students = new List<Student>
{new Student { Name = "Alice", Age = 20, Score = 85 },new Student { Name = "Bob", Age = 22, Score = 90 },new Student { Name = "Charlie", Age = 19, Score = 78 }
};

🔍 查询:找出成绩 ≥ 80 的学生姓名,按年龄升序排列

// 方法语法(推荐)
var names = students.Where(s => s.Score >= 80).OrderBy(s => s.Age).Select(s => s.Name).ToList(); // 结果: ["Charlie", "Alice"]

📊 聚合操作

int count = students.Count(s => s.Age > 20);      // 1
double avgScore = students.Average(s => s.Score); // 84.33...
Student top = students.MaxBy(s => s.Score);       // Bob(C# 11+)

🔄 分组

var byAgeGroup = students.GroupBy(s => s.Age >= 20 ? "Adult" : "Teen");

✅ 核心 LINQ 方法(最常用)

方法作用
Where筛选(相当于 SQL 的 WHERE
Select投影/转换(相当于 SQL 的 SELECT
OrderBy / OrderByDescending排序
GroupBy分组
Count, Sum, Average, Min, Max聚合计算
Any, All判断是否存在/是否全部满足条件
First, FirstOrDefault, Single, SingleOrDefault获取单个元素

✅ 延迟执行(Deferred Execution)—— 重要概念!

LINQ 查询不会立即执行,而是在你遍历结果或调用 .ToList() 等方法时才真正执行

var query = students.Where(s => s.Score > 80); // ❌ 此时没查数据!foreach (var s in query) // ✅ 这里才执行查询
{Console.WriteLine(s.Name);
}

💡 好处:可以链式组合多个操作,最终只执行一次高效查询(尤其对数据库)。


✅ 实际应用场景

  1. 过滤 UI 列表数据
    var filtered = allProducts.Where(p => p.Price < 100).ToList();
    
  2. 从 API 返回的数据中提取所需字段
  3. 配合 Entity Framework 查询数据库
    var users = dbContext.Users.Where(u => u.IsActive).Select(u => u.Email).ToList();
    
  4. 数据转换与清洗

⚠️ 注意事项

  • LINQ 性能很好,但避免在循环中重复执行未缓存的查询
  • 对数据库使用 LINQ 时,注意生成的 SQL 是否高效(可用 EF 日志查看)。
  • 不要过度使用复杂嵌套 LINQ,影响可读性。

✅ 小结

特点说明
统一查询语法一套语法查所有数据源
强类型 & 编译时检查比字符串 SQL 更安全
延迟执行高效组合查询
函数式风格代码简洁、声明式(“要什么”,而不是“怎么做”)

🧠 一句话记住 LINQ
“用 C# 写 SQL,查万物。”

问题

使用LINQ有什么好处

他为查询任何类型的数据源提供了通用语法。

什么是LINQ提供程序

他是实现IQueryProvider和Iqueryable接口的任何类。

http://www.dtcms.com/a/614488.html

相关文章:

  • Springboot加盟平台推荐可视化系统ktdx2ldg(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 公网动态ip如何做网站网站项目建设周期
  • 路由器选择需关注无线传输速率、端口配置与信号覆盖
  • php网站建设论文答辩温州手机建站模板
  • 达梦的dbms_lock在DSC中能用吗
  • 前端微前端部署方案,Nginx与Webpack
  • 网站建站系统ps软件下载电脑版多少钱
  • c++ easylogging 使用示例
  • Holdout机制:推荐系统中评估部门级业务贡献的黄金标准
  • 地域性旅游网站建设系统结构品牌公司网站设计
  • 4k中国视频素材网站wordpress用哪个版本
  • 计算机网络应用层
  • 写资料的网站有哪些宽屏公司网站源码php
  • 网站开发 验收移交写网站建设的软文
  • C语言编译器App介绍与使用指南
  • Clang与GCC链接机制解析:从标准库选择到跨平台编译
  • 【ZeroRange WebRTC】WebRTC拥塞控制技术深度分析
  • 网站动态背景怎么做国际新闻今天
  • redis实战篇--商品缓存模块
  • docker安装index-tts,实现文本转语音的本地私有化部署
  • 【 Java八股文面试 | Redis篇 缓存问题、持久化、分布式锁 】
  • 乐清网站建设推广公司网站模板设计
  • 招商银行和建设银行网站功能对比app页面设计图片
  • 存储引擎MySQL
  • XML Schema any 元素详解
  • 沈阳网站推广运营公司微信公众号网页
  • MyBatis 的 新增、修改、删除 操作
  • 2025年计算机行情如何,有哪些方向可以入坑
  • C语言编译器优化技术研究
  • 鸿蒙PC平台三方库移植实战:以libid3tag库为例(附完整移植流程)