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

通过示例解释 C# 中强大的 LINQ的集运算

Language Integrated Query (LINQ) 是 C# 中一个强大的特性,用于查询和操作数据集合。LINQ 提供了一种简洁、类型安全和可读性高的方式来处理数据集合。本文将通过多个示例详细解释 LINQ 的集合运算,包括筛选、排序、分组、投影和连接。

一、LINQ 基础

LINQ 查询通常由以下部分组成:

  1. 数据源:要查询的集合。
  2. 查询:定义如何从数据源中提取信息。
  3. 执行:对查询进行遍历以检索数据。

示例数据源:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

二、筛选(Filtering)

筛选操作用于从数据源中选择符合条件的元素。

示例:选择所有偶数

var evenNumbers = from number in numberswhere number % 2 == 0select number;foreach (var num in evenNumbers)
{Console.WriteLine(num);
}

三、排序(Sorting)

排序操作用于对数据源中的元素进行排序。

示例:按升序排序

var ascendingNumbers = from number in numbersorderby numberselect number;foreach (var num in ascendingNumbers)
{Console.WriteLine(num);
}

示例:按降序排序

var descendingNumbers = from number in numbersorderby number descendingselect number;foreach (var num in descendingNumbers)
{Console.WriteLine(num);
}
​

四、分组(Grouping)

分组操作用于将数据源中的元素按指定的键进行分组。

示例:按奇偶分组

var groupedNumbers = from number in numbersgroup number by number % 2 into numberGroupselect numberGroup;foreach (var group in groupedNumbers)
{Console.WriteLine(group.Key == 0 ? "Even numbers:" : "Odd numbers:");foreach (var num in group){Console.WriteLine(num);}
}
​

五、投影(Projection)

投影操作用于从数据源中选择特定的元素或计算结果。

示例:选择数字的平方

var squaredNumbers = from number in numbersselect number * number;foreach (var num in squaredNumbers)
{Console.WriteLine(num);
}
​

六、连接(Joining)

连接操作用于将两个数据源的相关元素组合在一起。

示例:内连接

List<string> categories = new List<string> { "A", "B", "C" };
List<Product> products = new List<Product>
{new Product { Name = "Apple", Category = "A" },new Product { Name = "Banana", Category = "B" },new Product { Name = "Carrot", Category = "C" },new Product { Name = "Date", Category = "D" }
};var innerJoin = from category in categoriesjoin product in products on category equals product.Categoryselect new { Category = category, Product = product.Name };foreach (var item in innerJoin)
{Console.WriteLine($"Category: {item.Category}, Product: {item.Product}");
}
​

七、综合示例

结合多个 LINQ 操作进行综合示例。

示例:筛选、排序、分组和投影

var result = from number in numberswhere number % 2 == 0orderby number descendinggroup number by number % 4 into numberGroupselect new{Remainder = numberGroup.Key,Numbers = numberGroup};foreach (var group in result)
{Console.WriteLine($"Numbers with remainder {group.Remainder} when divided by 4:");foreach (var num in group.Numbers){Console.WriteLine(num);}
}
http://www.xdnf.cn/news/14067.html

相关文章:

  • python 将CAD的dwg转geoJson
  • 零基础学前端-传统前端开发(第四期-JS基础-运算)
  • 【C语言指南】数组作为函数参数的传递机制
  • 从零到一:构建企业级 Vue.js 3 组件库
  • Arcgispro底图突然加载失败解决办法+属性表中文乱码
  • k8s从入门到放弃之k3s轻量级
  • 第四届智能电网与能源系统国际学术会议(SGES 2025)
  • Hive 序列化与反序列化:数据的 “打包“ 与 “拆箱“ 艺术
  • Angular入门的环境准备步骤工作
  • RabbitMQ缓存详解:由来、发展、核心场景与实战应用
  • HarmonyOS 5中UniApp的调试步骤
  • 宝塔面板如何关闭https强制跳转http/https共存?
  • 【大模型推理学习】flashMLA (二)
  • AWS Well-Architected Framework详解
  • 影刀学院课程地图导航汇总
  • 第18篇:数据库中间件架构中的服务治理与限流熔断机制设计
  • 使用RAG的思想进行PPT生成的框架思路-SlideCoder
  • codeforces 274D. Lovely Matrix
  • JAVA_强制类型转换:
  • Python测试框架库之pytest使用详解
  • 基于Qt的app开发第十四天
  • linux环境配置Go运行环境
  • 缩小 IEEE 会议论文 LaTeX 模板标题、作者信息和正文的间距
  • 零基础实战:用 Docker 和 vLLM 本地部署 bge-reranker-v2-m3 重排序模型
  • day65—回溯—单词搜索(LeetCode-79)
  • Django全栈开发实战与架构思考
  • 栈与队列:数据结构优劣全解析
  • Vue3 + Element Plus 获取表格列信息
  • DIPLOMAT开源程序是基于深度学习的身份保留标记对象多动物跟踪(测试版)
  • 【论文解读】START:自学习的工具使用者模型