C# Linq介绍

news/2024/9/28 21:15:53/

LINQ(Language Integrated Query)是 C# 和其他 .NET 语言中的一种查询语法,它允许开发人员直接在代码中使用类似 SQL 的语法来查询和操作数据。LINQ 的目标是为不同的数据源(如集合、数据库、XML 等)提供统一的查询方式。

LINQ 的作用

LINQ 是为了简化和统一数据访问和查询,提供了一致的语法来查询各种数据源,比如:

  • 内存中的集合(如 List<T>Array 等)
  • 数据库(如通过 Entity Framework 查询 SQL 数据库)
  • XML 文档
  • 远程服务和 Web API
  • 文件系统

通过 LINQ,开发者可以用一种声明性的方法来查询数据源,而不必关注底层的实现细节。

LINQ 的工作方式

LINQ 通过一组标准操作符(如 WhereSelectOrderBy 等)和扩展方法来操作数据源。它将查询逻辑抽象成方法调用,并可以与集合类、数据库或其他数据源无缝集成。

LINQ 的主要功能包括:
  1. 数据过滤:提取满足特定条件的元素。
  2. 排序:按升序或降序排列数据。
  3. 投影:从数据源中提取和转换特定字段或对象。
  4. 分组:将数据按某一字段进行分组。
  5. 聚合:执行累加、求和、平均等操作。

LINQ 的常用查询操作符

  • Where:用于筛选符合条件的元素。
  • Select:用于投影元素(即从数据中选择特定字段)。
  • OrderBy:用于对数据进行排序。
  • GroupBy:将数据按某个键进行分组。
  • Join:连接多个数据源。
  • Sum、Average、Count:聚合操作符,用于计算和统计数据。

LINQ 的两种语法

  1. 查询表达式语法:类似 SQL 的语法,非常直观易读。
  2. 方法语法:使用扩展方法链式调用。

示例

1. 内存集合上的 LINQ 查询
using System;
using System.Collections.Generic;
using System.Linq;class Program
{static void Main(){List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };// 查询表达式语法var evenNumbersQuery = from num in numberswhere num % 2 == 0select num;// 方法语法var evenNumbersMethod = numbers.Where(n => n % 2 == 0);Console.WriteLine("Even numbers (Query syntax):");foreach (var num in evenNumbersQuery){Console.WriteLine(num); // 输出 2, 4, 6, 8, 10}Console.WriteLine("Even numbers (Method syntax):");foreach (var num in evenNumbersMethod){Console.WriteLine(num); // 输出 2, 4, 6, 8, 10}}
}

解释

  • 在查询表达式语法中,我们使用 from ... in ... where ... select ... 的形式来查询数据。
  • 在方法语法中,Where(n => n % 2 == 0) 是一种 Lambda 表达式,它过滤出所有偶数。
2. LINQ 查询数据库(使用 Entity Framework)

在使用 Entity Framework 等 ORM 框架时,LINQ 可以直接查询数据库,并自动生成相应的 SQL。

using (var context = new MyDbContext())
{var users = from user in context.Userswhere user.Age > 18orderby user.Nameselect user;foreach (var user in users){Console.WriteLine(user.Name);}
}

解释

  • from user in context.Users where user.Age > 18 是从数据库中查询所有年龄大于 18 的用户。
  • orderby user.Name 表示按名字排序。
  • Entity Framework 会将 LINQ 查询自动转换为 SQL 并执行。
3. LINQ 查询 XML 数据
using System;
using System.Linq;
using System.Xml.Linq;class Program
{static void Main(){XDocument xdoc = XDocument.Load("books.xml");var books = from book in xdoc.Descendants("book")where (int)book.Element("price") > 20select book.Element("title").Value;foreach (var title in books){Console.WriteLine(title);}}
}

解释

  • XDocument 是 .NET 中用于处理 XML 的类。
  • xdoc.Descendants("book") 获取 XML 文档中所有的 <book> 元素。
  • where (int)book.Element("price") > 20 筛选价格大于 20 的书。

LINQ 的优点

  1. 统一数据查询:不管是查询内存中的对象集合、数据库,还是 XML 文件,LINQ 提供了统一的查询语法。
  2. 类型安全和 IntelliSense 支持:因为 LINQ 是集成到语言中的,所以编译器会检查语法错误,并为开发者提供自动完成(IntelliSense)支持。
  3. 可读性高:查询表达式类似 SQL,使得查询代码更加简洁和可读。
  4. 延迟执行:LINQ 查询通常是延迟执行的,这意味着在实际迭代或操作结果之前,查询不会立即执行。这可以提高性能。

LINQ 查询的执行

LINQ 有两种执行方式:

  • 延迟执行(Deferred Execution):查询在定义时不会立即执行,而是在对结果进行迭代时才执行。典型的延迟执行操作符包括 WhereSelect 等。
  • 立即执行(Immediate Execution):查询会立即执行并返回结果,常见的立即执行操作符包括 ToListToArraySum 等。

例如:

// 延迟执行
var query = numbers.Where(n => n % 2 == 0); // 这里不会执行查询// 立即执行
var result = query.ToList(); // 这里查询才会被执行

总结

LINQ 是一种用于数据查询和操作的强大工具,它将不同的数据源抽象为统一的查询接口,使得开发人员可以使用一致的方式处理内存数据、数据库、XML 和其他数据源。LINQ 提供了简洁、类型安全、可读性高的语法,非常适合用于大多数的查询操作场景。


http://www.ppmy.cn/news/1530751.html

相关文章

从预测性维护到智能物流:ARM边缘计算控制器的工业实践

工业4.0时代的到来&#xff0c;边缘计算技术成为连接物理世界与数字世界的桥梁。ARM架构的边缘计算控制器凭借其低功耗、高能效和灵活性等特点&#xff0c;在工业自动化领域展现出巨大潜力。本文将通过几个实际应用案例来探讨ARM边缘计算控制器是如何提升生产线效率和安全性的&…

【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;上&#xff09; 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;下&#xff09; 文章目录 系列文章目录前言一、装饰器语法6.Builder语法&#xff1a;&#xff08;1&…

PMP--二模--解题--111-120

文章目录 7.成本管理111、 [单选] 你向项目出资人提供了项目的成本估算&#xff0c;他对估算不满意&#xff0c;因为他认为价格太高了。他要你削减项目估算的15%&#xff0c;你该怎么做&#xff1f; 8.质量管理112、 [单选] 在新建水处理厂的建设过程中&#xff0c;政府对处理厂…

文件上传漏洞+CTF实例

解题思路 前端绕过 手动修改前端js代码进行绕过&#xff1a;右击-查看页面源代码-ctff进行位置定位-修改JavaScript函数 后端绕过 文件类型绕过&#xff08;Content-Type&#xff09; 常见MIME类型描述application/octet-stream 表示所有其他情况的默认值 text/plain表示文…

节日拜访:白酒作为节日礼物,传递节日祝福

随着节日的脚步渐近&#xff0c;人们开始忙碌地挑选礼物&#xff0c;准备拜访亲朋好友。在这个欢聚的时刻&#xff0c;选择一款合适的节日礼物显得尤为重要。而豪迈白酒&#xff08;HOMANLISM&#xff09;&#xff0c;作为一款品质且富有文化内涵的白酒&#xff0c;正逐渐成为人…

代码随想录算法训练营第58天|卡码网 117. 软件构建、47. 参加科学大会

1. 卡码网 117. 软件构建 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1191 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0117.软件构建.html 思路&#xff1a;使用BFS BFS的实现思路&#xff1a; 拓扑排序的过程&#xff0c;其实就两步…

Linux、Windows、Android下查看可执行文件、动态库和静态库信息的命令

TL; DR 我常用的命令&#xff1a; Linux lddWindows&#xff08;需要借助vs&#xff09; dumpbin /DEPENDENTSAndroid ldd 绝对路径在不同的操作系统下&#xff0c;查看可执行文件、动态库和静态库的命令各不相同。以下是 Linux、Windows 和 Android 平台下的常用命令&…

开源推理库介绍:ZML,Distributed Llama,EXO | LeetTalk Daily

“LeetTalk Daily”&#xff0c;每日科技前沿&#xff0c;由LeetTools AI精心筛选&#xff0c;为您带来最新鲜、最具洞察力的科技新闻。 开源推理库的出现为机器学习模型的部署、监控和扩展提供了强大的支持。我们介绍三个重要的开源推理库&#xff1a;ZML、Distributed Llama …