C#中的LINQ之美:优雅的数据查询与操作

news/2024/10/23 21:05:59/

在这里插入图片描述

LINQ(Language Integrated Query,语言集成查询)是C#中一个强大的工具,它将查询功能直接融入到语言中,使开发者能够以一种更直观、更接近自然语言的方式来操作数据。LINQ不仅能极大地提高开发效率,而且让代码变得更加简洁易读。

LINQ的语法

LINQ的语法主要分为两种:

  • 查询语法: 这种语法更接近SQL,具有很强的可读性。
  • 方法语法: 这种语法使用一系列扩展方法来实现查询,更加灵活。

查询语法示例:

var query = from person in peoplewhere person.Age > 30select person.Name;

方法语法示例:

var query = people.Where(person => person.Age > 30).Select(person => person.Name);

LINQ的工作原理

LINQ的底层实现是基于迭代器模式的。当我们执行一个LINQ查询时,它并不会立即执行,而是创建了一个表示查询的表达式树。只有当我们对查询结果进行遍历时,表达式树才会被执行,并且结果会被延迟加载。

LINQ的应用场景及示例

1. 筛选数据
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
2. 投影数据
List<Person> people = new List<Person> { /* ... */ };
var names = people.Select(p => p.Name);
3. 排序数据
var sortedPeople = people.OrderBy(p => p.Age);
4. 分组数据
var groupedByAge = people.GroupBy(p => p.Age);
5. 聚合操作
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int sum = numbers.Sum();
double average = numbers.Average();
6. 连接数据
var orders = new List<Order> { /* ... */ };
var customers = new List<Customer> { /* ... */ };
var customerOrders = orders.Join(customers,o => o.CustomerId,c => c.Id,(o, c) => new { CustomerName = c.Name, OrderTotal = o.Total }
);
7. 集合操作
var distinctNumbers = numbers.Distinct();
var union = numbers.Union(new[] { 10, 11, 12 });
8. 条件判断
bool hasAnyEvenNumber = numbers.Any(n => n % 2 == 0);
9. 数量统计
int count = people.Count(p => p.Age > 30);
10. 自定义扩展方法
public static IEnumerable<T> MyCustomFilter<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{foreach (T element in source){if (predicate(element))yield return element;}
}

LINQ的优势

  • 统一的数据访问: LINQ提供了一个统一的接口来访问各种数据源,使得开发者可以专注于业务逻辑。
  • 提高代码可读性: LINQ的语法简洁明了,更容易理解。
  • 延迟执行: 延迟执行可以提高性能,避免不必要的计算。
  • 丰富的操作符: LINQ提供了一系列丰富的操作符,可以实现各种各样的数据查询和操作。
  • 集成到IDE: Visual Studio对LINQ提供了很好的支持,包括智能感知、代码提示等。

LINQ作为C#语言的一大亮点,为开发者提供了一种优雅、高效的方式来操作数据。通过学习和掌握LINQ,我们可以写出更加简洁、可读性更高的代码,提高开发效率。


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

相关文章

PHP如何实现页面跳转

在PHP中&#xff0c;实现页面跳转有多种方法&#xff0c;这些方法包括使用HTTP头信息、JavaScript以及Meta标签。 方法一&#xff1a;使用HTTP头信息 PHP可以使用header()函数发送HTTP头信息来实现页面跳转。这是最常用和推荐的方式&#xff0c;因为它不需要依赖客户端的Java…

等价文件名绕过

1.绕过黑名单绕过&#xff08;等价扩展名-pass-03&#xff09; fuzz字典&#xff1a;https://github.com/evi1hack/Fuzz_dic/tree/master 下载后就是所有php文件参数的后缀 2.这里用upload-labs&#xff08;less-3&#xff09;进行示例&#xff0c;将抓包中的php后缀修改成tes…

【python + Redis】hash值查增删

文章目录 前置步骤一、查二、增三、删 前置步骤 pip install redis# -*- coding: utf-8 -*- import redis #这个redis不能用&#xff0c;请根据自己的需要修改 r redis.Redis(host"127.0.0.1",port6379,password"123456", db0)Redis库数据 keyvalue1{“i…

Zookeeper面试整理-Zookeeper的核心功能

Zookeeper 作为一个分布式协调服务,提供了许多关键的功能,这些功能帮助开发人员解决分布式系统中的一致性、协调和同步问题。以下是 Zookeeper 的核心功能: 1. 配置管理(Configuration Management) Zookeeper 提供了一个分布式应用程序的集中配置存储。通过 Zookeeper,可…

代码工艺:写代码的好习惯

1. 充分校验入参 有一句话叫 “All input is evil”&#xff0c;即一切的输入都可能是恶意的。 因此&#xff0c;经验丰富的工程师会对接口的入参进行严格的校验&#xff0c;从最基础的非空、长度校验&#xff0c;到复杂的业务逻辑校验都不应忽略。例如&#xff0c;在典型的电…

数智合同 | 业财一体与履约联动的数字化转型

随着信息化技术的发展&#xff0c;合同数智化管理为应对合同管理挑战提供了新机遇。企业需要深入思考数智化手段在合同管理中的应用&#xff0c;以提高合同管理水平&#xff0c;应对新形势下的市场竞争挑战与合规要求&#xff0c;实现企业的高质量发展。 2024年5月&#xff0c;…

esxi配置磁盘直通虚拟机

基于VMware Exsi环境&#xff0c;考虑到特殊业务需求&#xff0c;需要直接将磁盘数据提供给虚拟机使用。 打开SSH服务 登录VMware vSphere Web Client控制台&#xff0c;主机-服务中启用安全Shell(SSH)&#xff0c;通过SSH登录esxi服务器 配置磁盘直通 # 通过VMware vSpher…

vue3中可组合函数的应用场景

可组合函数&#xff08;Composables&#xff09;是 Vue 3 的组合式 API 中的一种设计模式&#xff0c;用于将可复用的逻辑封装成独立的函数&#xff0c;从而提高代码的模块化和复用性。可组合函数的核心目标是将复杂的逻辑拆分为小的、可管理的单元&#xff0c;然后在不同的组件…