LINQ 和 LINQ扩展方法 (1)

LINQ函数概念:

LINQ(Language Integrated Query)是一种C#语言中的查询技术,它允许我们在代码中使用类似SQL的查询语句来操作各种数据源。这些数据源可以是集合、数组、数据库、XML文档等等。LINQ提供了一种统一的编程模型,使我们能够使用相同的方式来查询和操作不同类型的数据。

在C#中,LINQ主要由以下几个组成部分:

数据源(Data source):可以是集合、数组、数据库、XML文档等等。
查询变量(Query variable):用于存储查询结果的变量。
查询表达式(Query expression):类似于SQL语句的查询表达式,用于描述查询的逻辑和条件。
查询操作符(Query operator):用于执行各种查询操作,如筛选、排序、分组、投影等等。
查询结果(Query result):查询操作的返回结果。

其中数据源,查询变量,查询结果是必选项,查询表达式,查询操作符是可选项。

LINQ 查询关键字

1.where 条件,查询的逻辑和条件,扩展where()

// 1.where 条件,查询的逻辑和条件,扩展where()
List<int> list1 = new List<int>() { 6, 4, 2, 7, 9, 0 };
IEnumerable<int> query = list1.Where(c => c >= 1 && c <= 5);
for (int i = 0; i <= query.Count() - 1; i++)
{Console.WriteLine(query.ToArray()[i]);  // 4,2 
}
// LINQ是强类型,会根据数据源的类型推断出来查询结果的类型。
IEnumerable<int> query2 = from item in list1//where item >=1 && item <= 5 // 4,2   // 并列 && ,或者|| 等于== 不等于!=, >,<,>=,<=,!//where !(item % 2 == 0)   //where !GetEven(item)  // 7,9select item;
for (int i = 0; i <= query2.Count() - 1; i++)
{Console.WriteLine(query2.ToArray()[i]);
}List<string> list2 = new List<string>() { "abc", "adf", "ef", "bga", "cdf" };
IEnumerable<string> query3 = from item in list2where item.Contains("a") || item.Contains("e")   //item.Contains 查询指定字符是否出现在字符串中select item;
for(int i = 0; i <= query3.Count() - 1; i++)
{Console.WriteLine(query3.ToArray()[i]);
}// 1.where条件中封装的一个方法
private bool GetEven(int num)
{return num % 2 == 0;
}
字符串返回结果:

2.对查询结果做筛选(显示和隐藏列)

// 2.对查询结果做筛选(显示和隐藏列) Select()扩展方法和select子名类似, SelectMany()类似于两个from
/**/
//创建两个整数列表:
List<int> list1 = new List<int>() { 1, 2, 3 };
List<int> list2 = new List<int>() { 4, 5, 6 };
//使用Select方法对list1中的每个元素进行查询,
var result1 = list1.Select(item => item);
//使用查询语法对list1中的每个元素进行查询
var result2 = from item in list1select item;// 使用SelectMany方法查询多个数据源,item指的是list1中的每一项
var result3 = list1.SelectMany(item => list2);
// Data To Object==DTO把查询出来的数据转换成对象,目的:访问时方便,打点调用
var result4 = from item in list1from value in list2//select new { item,value};select new IntObject() { Key = item , Value = value };
// 将result4的结果转换为List<IntObject>类型的列表,并存储在result5中
List<IntObject> result5 = result4.ToList();
// 循环遍历result5列表,并打印结果
for ( int i = 0;i < result5.Count;i++)
{var obj = result5[i];Console.WriteLine($"Key:{obj.Key},Value:{obj.Value}");
}
输出结果:

3. 分组  GroupBy(), group子名,into子句

1.GroupBy()本身具有延迟执行的特性,而ToLookup()没有。
List<string> sequence = new List<string>() { "a", "b", "b", "c", "c" };
// GroupBy(o => o)是一个 lambda 表达式,用于指定 GroupBy 方法分组的依据
var group = sequence.GroupBy(o => o);  // 默认GroupBy统计的是Count
foreach (var g in group)
{Console.WriteLine("Key:{0}, Count:{1}", g.Key, g.Count());
}

输出结果:

这表明"a" 出现了 1 次,"b" 出现了 2 次,"c" 出现了 2 次。

PS: GroupBy(o => o) 作为 GroupBy 方法的键选择器,是一种简洁且直观的方式来按元素的值进行分组。这种写法不仅代码简洁,而且易于理解和维护。

2.group子名,into子句

group ... by ... into ...这是一个查询表达式,用于将数据源中的元素按照指定的键选择器进行分组。这种查询表达式是LINQ(Language Integrated Query)的一部分,它允许你以声明式的方式对集合进行查询和操作。

// 使用LINQ 进行数据分组和查询
// 1.使用了LINQ的查询语法,对一个名为sequence的序列进行操作。
// 2.通过group item by item语句,将序列中的元素按照它们的值进行分组。每个元素的值作为分组的键。
// 3.通过into groupResult子句,将分组的结果存储在一个名为groupResult的变量中。
// 4.使用foreach循环遍历查询结果,即遍历每个分组。
// 5.在foreach循环中,使用Console.WriteLine方法打印每个分组的键(即分组的值)和分组中元素的数量。
List<string> sequence = new List<string>() { "a", "b", "b", "c", "c" };// 第一段代码:
var result = from item in sequencegroup item by item into groupResult  // into子句:把分组的结果保存到一个变量中,方便取分组的结果select groupResult;foreach (var item in result)
{Console.WriteLine($"Key:{item.Key}, Count:{item.Count()}");
}// 第二段代码(省略了into子句,)
var resulta = from item in sequencegroup item by item;foreach (var item in resulta)
{Console.WriteLine($"Key:{item.Key}, Count:{item.Count()}");
}

 4. ToLookup()  扩展方法来将数据集合分组

 ToLookup() 相当于group by into    GroupBy()相当于group by 

  • 数据分组ToLookup提供了一种方便的方式来根据某个属性对集合中的元素进行分组,这在处理需要按类别或属性分组的数据时非常有用。当你需要根据某个属性或条件将数据集合分成多个小组时,可以使用ToLookup
  • 数据展示:在分组后,可以遍历这些分组,对每个分组进行特定的操作,如计算、展示等。
// 方式一: 使用ToLookup()
// 创建了一个Person对象的列表,每个Person对象包含姓名(Name)、分数(Score)和组别(Group)。
var nameValueScore = new Person[]
{new Person(){Name = "张三",Score = 80,Group = "A"},new Person(){Name = "李四",Score = 76,Group = "B"},new Person(){Name = "王五",Score = 94,Group = "A"}
};// 使用ToLookup进行分组
var lookupValues = nameValueScore.ToLookup(p => p.Group);
// 遍历分组结果
foreach (var g in lookupValues)   // 循环每一组
{Console.WriteLine($"组名:{g.Key}");foreach (var item in g)   // 循环一组中的多个人{Console.WriteLine($"姓名:{item.Name},分数:{item.Score},分组:{item.Group}");}
}//外层的foreach循环遍历lookupValues中的每个分组(即每个组别)。
//内层的foreach循环遍历每个分组中的所有Person对象,并打印出每个人的姓名、分数和组别。// 方式二: 使用group...by...into...var result = from p in nameValueScoregroup p by p.Group into gselect g;foreach (var g in lookupValues)   // 循环每一组{Console.WriteLine($"组名:{g.Key}");foreach (var item in g)   // 循环一组中的多个人{Console.WriteLine($"姓名:{item.Name},分数:{item.Score},分组:{item.Group}");}}

输出结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421731.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ Qt开发:运用QJSON模块解析数据

转载C Qt开发&#xff1a;运用QJSON模块解析数据-阿里云开发者社区 Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&…

OpenHarmony鸿蒙( Beta5.0)智能门铃开发实践

鸿蒙开发往期必看&#xff1a; 一分钟了解”纯血版&#xff01;鸿蒙HarmonyOS Next应用开发&#xff01; “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…

[Web安全 网络安全]-文件包含漏洞

文章目录&#xff1a; 一&#xff1a;前言 1.什么是文件包含漏洞 2.文件包含漏洞的成因 3.文件包含漏洞的分类 4.文件包含漏洞的防御策略 5.文件包含函数&#xff08;触发点Sink&#xff09; 6.环境 6.1 靶场 6.2 其他工具 二&#xff1a;文件包含LFI labs靶场实验…

GD32E230 RTC报警中断功能使用

GD32E230 RTC报警中断使用 GD32E230 RTC时钟源有3个&#xff0c;一个是内部RC振动器产生的40KHz作为时钟源&#xff0c;或者是有外部32768Hz晶振.,或者外部高速时钟晶振分频作为时钟源。 &#x1f516;个人认为最难理解难点的就是有关RTC时钟异步预分频和同步预分频的计算。在对…

图神经网络介绍3

1. 图同构网络&#xff1a;Weisfeiler-Lehman 测试与图神经网络的表达力 本节介绍一个关于图神经网络表达力的经典工作&#xff0c;以及随之产生的另一个重要的模型——图同构网络。图同构问题指的是验证两个图在拓扑结构上是否相同。Weisfeiler-Lehman 测试是一种有效的检验两…

python-数字反转

题目描述 给定一个整数 N&#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式&#xff0c;即除非给定的原数为零&#xff0c;否则反转后得到的新数的最高位数字不应为零&#xff08;参见样例 2&#xff09;。 输入格式 一个整数 N。 输出格式 …

FAT32文件系统详细分析 (格式化SD nandSD卡)

FAT32 文件系统详细分析 (格式化 SD nand/SD 卡) 目录 FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)1. 前言2.格式化 SD nand/SD 卡3.FAT32 文件系统分析3.1 保留区分析3.1.1 BPB(BIOS Parameter Block) 及 BS 区分析3.1.2 FSInfo 结构扇区分析3.1.3 引导扇区剩余扇区3.1.4 …

【Go】Go语言中的基本数据类型与类型转换

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

IDEA创建MAVEN项目

这里介绍如何使用IDEA创建MEAN工程&#xff0c;这里以创建模块举例&#xff0c;创建项目步骤相当&#xff1b; 创建项目 File-项目-new-module 这里选择普通java项目&#xff0c;Archetype选quickstart 项目介绍 create后可以看到创建的demo1 及其目录结构 里面默认的App里…

C++设计模式——Mediator中介者模式

一&#xff0c;中介者模式的定义 中介者模式是一种行为型设计模式。它通过一个中介者对象将多个对象之间的交互关系进行封装&#xff0c;使得对象之间的交互需要通过中介者对象来完成。该设计模式的结构很容易理解&#xff0c;以中介者为中心。 中介者模式的设计思想侧重于在…

【爬虫软件】小红书按关键词批量采集笔记,含笔记正文、转评赞藏等!

一、背景介绍 1.1 爬取目标 熟悉我的小伙伴都了解&#xff0c;我之前开发过2款软件&#xff1a; 【GUI软件】小红书搜索结果批量采集&#xff0c;支持多个关键词同时抓取&#xff01; 【GUI软件】小红书详情数据批量采集&#xff0c;含笔记内容、转评赞藏等&#xff01; 现在…

【Linux】进程调度与切换

【Linux】进程调度与切换 1. 基本概念2. 进程切换3. 进程调度3.1运行队列实现优先级设计3.2 处理效率问题3.3 活动队列与过期队列3.4 如何解决饥饿问题3.5 active指针和expired指针 1. 基本概念 竞争性: 系统进程数目众多&#xff0c;而CPU资源只有少量&#xff0c;甚至1个&am…

Linux——高流量 高并发(访问场景) 高可用(架构要求)

高并发通用设计逻辑&#xff1a; 定位单点&#xff0c;拆分问题 架构调整的顺序&#xff1a; 动静分离 // 没有实现动静分离 // 静态请求 交给 nginx或者 httpd 这种对于静态资源处理效率更高的服务&#xff0c;动态请求 交给php-fpm 服务来处理 使用云服务提供商 &#xff…

数据库(DB、DBMS、SQL)

今天我来讲解一下数据库和可视化数据库管理系统的使用 数据库概述 数据库 存储数据的仓库&#xff0c;数据是有组织的存储 DataBase (DB) 数据库管理系统 操纵和管理数据库的大型软件 DataBaseMangement System (DBMS) SQL 操作关系型数据库的编程语言&#xff0c;定义…

探索最佳 Shell 工具:全面测评 Bash、Zsh、Fish、Tcsh 和 Ksh

感谢浪浪云支持发布 浪浪云活动链接 &#xff1a;https://langlangy.cn/?i8afa52 文章目录 1. 简介2. 测评工具3. 测评标准4. Bash 测评4.1 易用性4.2 功能特性4.3 性能4.4 可定制性4.5 社区和支持 5. Zsh 测评5.1 易用性5.2 功能特性5.3 性能5.4 可定制性5.5 社区和支持 6. F…

Java、python、php三个版本 抗震救灾物资管理系统 抗洪救灾物资分配系统 救援物资申请平台(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

解锁SAP数据的潜力:SNP Glue与SAP Datasphere的协同作用

在各种文章中&#xff0c;我们研究了客户如何利用SNP Glue与基于云的数据仓库和数据湖相结合&#xff0c;以充分利用其SAP数据。SNP Glue 通过高性能集成解决方案帮助客户解锁 SAP 数据孤岛。例如&#xff0c;可以使用SNP Glue先进的增量捕获&#xff08;CDC&#xff09;近乎实…

DIC技术助力新能源汽车主机厂力学测试研发与整车性能提升

在新能源汽车研发过程中&#xff0c;非接触式全视场应变DIC测量方案&#xff0c;越来越受到汽车主机厂的信赖与认可。传统接触式传感器&#xff0c;在精度、灵活性和数据处理能力上存在局限。DIC技术可提供精确、高效、全视场、便捷的非接触式测量解决方案。 在汽车研发阶段&a…

算法41:位1的个数

一、需求 编写一个函数&#xff0c;获取一个正整数的二进制形式并返回其二进制表达式中 设置位的个数&#xff08;也被称为汉明重量&#xff09;。 示例 1: 输入&#xff1a;n 11 输出&#xff1a;3 解释&#xff1a;输入的二进制串 1011 中&#xff0c;共有 3 个设置位。示…

生命周期函数

所有继承MonoBehavior的脚本 最终都会挂载到Gameobiject游戏对象上 1.生命周期西数 就是该脚本对象依附的Gameobject对象从出生到消亡整个生命周期中 会通过反射自动调用的一些特殊函数 2.Unity帮助我们记录了一个Gameobject对象依附了哪些脚本 会自动的得到这些对象&#x…