C# Linq+ValueTuple(元祖),成为Linq高手!

文章目录

  • 前言
  • 简单使用:能被2整除
  • ValueTuple使用:两数相加等于4
    • 不使用元祖
    • 使用元祖
    • 排序
  • 基于类的Linq
    • GroupBy
    • Join
    • Distinct去重
      • 普通去重
      • 选择去重
    • 集合去重
      • Except
      • Intersect
      • Union
  • 总结

前言

Linq是C# 最强语法之一,和委托,get set并列(在我的心中)。我很早就听说了Linq 很牛了,这里来了解一下Linq如何写代码

C# Linq详解

C# 元祖,最佳的临时变量。

简单使用:能被2整除

static void Main(string[] args)
{int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };//选择能被2整除的数var numLinq = from item1 in numbers where item1 %2 == 0select item1;Console.WriteLine(JsonConvert.SerializeObject(numLinq));//[0,2,4,6]Console.WriteLine("Hello, World!");Console.ReadKey();
}

在这里插入图片描述

这里简单说明一下基础语法:

  • from item in source:item临时变量,source数据源
  • where:临时变量成立条件
  • select:返回值

ValueTuple使用:两数相加等于4

不使用元祖

        static void Main(string[] args){int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };//选择两数相加等于4的var numLinq = from item1 in numbers from item2 in numberswhere item1 + item2 == 4select new int[] { item1,item2};Console.WriteLine(JsonConvert.SerializeObject(numLinq));Console.WriteLine("Hello, World!");Console.ReadKey();}

在这里插入图片描述

使用元祖

static void Main(string[] args){int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };//选择两数相加等于4的var numLinq = from item1 in numbers from item2 in numberswhere item1 + item2 == 4select (item1,item2);Console.WriteLine(JsonConvert.SerializeObject(numLinq));Console.WriteLine("Hello, World!");Console.ReadKey();}

结果:

[{"Item1":0,"Item2":4},{"Item1":1,"Item2":3},{"Item1":2,"Item2":2},{"Item1":3,"Item2":1},{"Item1":4,"Item2":0}]

在这里插入图片描述

排序

  • orderby ascending:升序
  • orderby descending:降序
static void Main(string[] args)
{int[] numbers = new int[] { 1,6,4,0,3,4,6,7,5 };//升序var numLinq = from item1 in numbers orderby item1 ascendingselect item1;Console.WriteLine(JsonConvert.SerializeObject(numLinq));//降序var numLinq2 = from item1 in numbersorderby item1 descendingselect item1;Console.WriteLine(JsonConvert.SerializeObject(numLinq2));Console.WriteLine("Hello, World!");Console.ReadKey();
}

在这里插入图片描述

基于类的Linq

我们这里新建一个Person类

 public class Person{public string Name { get; set; }public int Id { get; set; }}

GroupBy

static void Main(string[] args)
{var persons = new List<Person>() {new Person(){Name = "小王",Id = 1},new Person(){Name = "小红",Id=2},new Person(){Name = "小黑", Id=2},};//使用聚合函数,返回的是分类好的数组var res = from item in personsgroup item by item.Id;Console.WriteLine(JsonConvert.SerializeObject(res));Console.WriteLine("Hello, World!");Console.ReadKey();
}

在这里插入图片描述

Join

join + in是两集合聚合,聚合条件必须要用equals,不能用=

static void Main(string[] args)
{var person1 = new List<Person>() {new Person(){Name = "小王",Id = 1},new Person(){Name = "小红",Id=2},};var person2 = new List<Person>() {new Person(){Name = "小拉",Id = 1},new Person(){Name = "小辣",Id=2},};//将相同ID的名称拼接var res = from item1 in person1join item2 in person2 on item1.Id  equals item2.Idselect new Person() { Name = item1.Name+item2.Name,Id = item1.Id};Console.WriteLine(JsonConvert.SerializeObject(res));Console.WriteLine("Hello, World!");Console.ReadKey();
}

在这里插入图片描述

Distinct去重

普通去重

 static void Main(string[] args){var lists = new List<int>() {1,2,3,4,5,5,5,6,1,2 };//普通去重var res = from item in lists.Distinct() select item;    Console.WriteLine(JsonConvert.SerializeObject(res));Console.WriteLine("Hello, World!");Console.ReadKey();}

选择去重

 static void Main(string[] args){var lists = new List<Person>() {new Person(){Name= "小王",Id= 1},new Person(){Name = "小丽" ,Id=2},new Person(){Name = "小乐",Id = 2},};//普通去重var res = from item in lists.DistinctBy(x => x.Id)select item;Console.WriteLine(JsonConvert.SerializeObject(res));Console.WriteLine("Hello, World!");Console.ReadKey();}

在这里插入图片描述

集合去重

Except

static void Main(string[] args)
{var list1 = new int[] { 1, 2, 3, 4, 5 };var list2 = new int[] { 3, 4, 5, 6, 7 };var res = from item in list1.Except(list2).ToList()select item;Console.WriteLine("list1去掉list2重复的");Console.WriteLine(JsonConvert.SerializeObject(res));Console.WriteLine("Hello, World!");Console.ReadKey();
}

在这里插入图片描述

Intersect

static void Main(string[] args)
{var list1 = new int[] { 1, 2, 3, 4, 5 };var list2 = new int[] { 3, 4, 5, 6, 7 };var res = from item in list1.Intersect(list2)select item;Console.WriteLine("list1拿到list2重复的");Console.WriteLine(JsonConvert.SerializeObject(res));Console.WriteLine("Hello, World!");Console.ReadKey();
}

在这里插入图片描述

Union

static void Main(string[] args)
{var list1 = new int[] { 1, 2, 3, 4, 5 };var list2 = new int[] { 3, 4, 5, 6, 7 };var res = from item in list1.Union(list2)select item;Console.WriteLine("list1和list2的并集");Console.WriteLine(JsonConvert.SerializeObject(res));Console.WriteLine("Hello, World!");Console.ReadKey();
}

在这里插入图片描述

总结

我这里只是简单的使用了一下Linq,如果想详细了解,可以去看看这个文章,写的确实是非常的全面

C# Linq详解

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

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

相关文章

基于JavaWeb+BS架构+SpringBoot+Vue智能停车计费系统的设计和实现

基于JavaWebBS架构SpringBootVue智能停车计费系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1 绪 论 1 1.1 研究背景 1 1.2 研究意义 1 1.3 系统主要功能 1 1.4 拟解决…

Blazor快速开发框架Known-V2.0.0

Known2.0 Known是基于Blazor的企业级快速开发框架&#xff0c;低代码&#xff0c;跨平台&#xff0c;开箱即用&#xff0c;一处代码&#xff0c;多处运行。 官网&#xff1a;http://known.pumantech.comGitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;ht…

Ubuntu22.04开机左上角下划线闪烁不开机

按下CtrlAltF2&#xff0c;打开TTY系统&#xff0c;然后通过用户名和密码登录&#xff0c;随后使用 sudo apt --fix-broken install 根据提示排除错误信息&#xff0c;然后使用apt安装lightdm安装就行。 tips:当使用EasyConnect的时候&#xff0c;你可能参考了下面这篇文章知…

130基于MATLAB并结合IBD算法的盲迭代反卷积法进行图像复原

基于MATLAB并结合IBD算法的盲迭代反卷积法进行图像复原 ,输出复原前后图像&#xff0c;PSF频谱结果。程序已调通&#xff0c;可直接运行。 130 matlab盲迭代反卷积IBD (xiaohongshu.com)

【Kafka-3.x-教程】-【三】Kafka-Broker、Kafka-Kraft

【Kafka-3.x-教程】专栏&#xff1a; 【Kafka-3.x-教程】-【一】Kafka 概述、Kafka 快速入门 【Kafka-3.x-教程】-【二】Kafka-生产者-Producer 【Kafka-3.x-教程】-【三】Kafka-Broker、Kafka-Kraft 【Kafka-3.x-教程】-【四】Kafka-消费者-Consumer 【Kafka-3.x-教程】-【五…

【Redis】Redis持久化方式

Redis 中有两种持久化方式&#xff0c;分别为 RDB 和 AOF。 RDB RDB 全称 Redis Database Backup file&#xff0c;也叫做 Redis 数据快照。简单来说就是把 Redis 中的数据记录到磁盘中。当 Redis 实例故障重启后&#xff0c;从磁盘读取快照文件&#xff0c;恢复数据。 RDB有…

ESP32S3+HX8347+RGB运行LVGL例程

之前用3线SPI驱动的HX8347屏其实是一个RGB屏&#xff0c;SPI只是用来给RGB屏幕的做配置的&#xff0c;当然也可以用来驱动屏幕&#xff0c;但是3线SPI驱动能力终究有限。本文谈一下用RGB方式来驱动。 RGB接线比较多&#xff0c;为此做了个转接板&#xff1a; 一、源码 1、scre…

超维空间M1无人机使用说明书——53、ROS无人机二维码识别与降落——V2升级版本

引言&#xff1a;使用二维码引导无人机实现精准降落&#xff0c;首先需要实现对二维码的识别和定位&#xff0c;可以参考博客的二维码识别和定位内容。本小节主要是通过获取拿到的二维码位置&#xff0c;控制无人机全向的移动和降落&#xff0c;本小节再V1版本的基础上增加了动…

实现稳定的联合显著性检测和联合目标分割

1 Title Toward Stable Co-Saliency Detection and Object Co-Segmentation(Bo Li; Lv Tang; Senyun Kuang; Mofei Song; Shouhong Ding)【IEEE Transactions on Image Processing 2022】 2 Conclusion This paper present a novel model for simultaneous stable co-saliency…

基础_函数_流程函数

流程函数也是很常用的一类函数&#xff0c;可以在SQL语句中实现条件筛选&#xff0c;从而提高语句效率.

【HarmonyOS4.0】第七篇-ArkUI系统组件(二)

鸿蒙开发系统组件详细剖析 五、进度条组件 进度条也是UI开发最常用的组件之一&#xff0c;ArkUI开发框架提供了两种类型的进度条&#xff1a; Progress 和LoadingProgress &#xff0c;前者可以精准指定进度&#xff0c;后者表示正在加载的状态&#xff0c;我们接下来对它们分…

Spring MVC 参数接收

参数接收 Springmvc中&#xff0c;接收页面提交的数据是通过方法形参来接收&#xff1a; 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参 springmvc接收的参数都是String类型&#xff0c;所以spirngmvc提供了很多converter&#xff08;转换器…

LightGBM原理和调参

背景知识 LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法的框架&#xff0c;具有支持高效率的并行训练、更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以处理海量数据等优点。 普通的GBDT算法不支持用mini-batch的方式训练&#xff0c;在每一次…

Google Pixel 与 iPhone手机:哪个更好?

iPhone稳定可靠&#xff0c;Pixel性价比高且创新。两者各有千秋&#xff0c;满足不同需求 谷歌的 Pixel 手机是 Android 最接近 iPhone 的手机&#xff0c;也是真正原生的Android手机。在iPhone 15 Pro Max 与华为 Mate 60 Pro的比较中不难看出&#xff0c;iPhone依然有着极强…

杨中科 .NETCORE 异步编程

一、 为什么需要异步编程 异步点餐的优点&#xff1a;能同时服务多个客人 异步点餐一定会提升单个客户点餐速度吗&#xff1f; 答案理所当然&#xff1a;不能 图片美化服务例子服务器能够同时服务的请求数量有限 void BeautifyPic (File photo, Response response) {byte[] …

Nginx配置反向代理实例二

Mac 安装Nginx教程 Nginx配置反向代理实例一 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 反向代理实例二实现的效果 使用nginx 反向代理&#xff0c;根据访问的地址跳转到不同端口的服务中 nginx 监听端口为81&#xff1b; 访问地址1&#xff1a;http:/…

postman使用-06断言

文章目录 一、断言定义二、 常用的断言三、断言-状态码&#xff08;1&#xff09;单一状态码断言&#xff1a;Status code:Code is 200 检查返回的状态码是否为200原始模板&#xff1a;修改后&#xff1a;括号里的200也可以改成自己要断言的状态码具体步骤&#xff1a;断言成功…

字体图标 iconFont

字体图标使用场景︰主要用于显示网页中通用、常用的一些小图标 精灵图是有诸多优点的&#xff0c;但是缺点很明显。 图片文件还是比较大的。图片本身放大和缩小会失真。一旦图片制作完毕想要更换非常复杂。 此时&#xff0c;有一种技术的出现很好的解决了以上问题&#xff0c…

springboot虹软人脸识别集成

准备工作 虹软开放平台中创建一个新的应用 虹软开发平台【点我跳转】 开始上代码 基本配置 将下载的jar包放到src同级目录下 <!-- 虹软--><dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactI…

力扣日记1.10-【二叉树篇】701. 二叉搜索树中的插入操作

力扣日记&#xff1a;【二叉树篇】701. 二叉搜索树中的插入操作 日期&#xff1a;2024. 参考&#xff1a;代码随想录、力扣 —————————————————————— 天哪&#xff0c;上次打开力扣还是2023&#xff0c;转眼已经2024&#xff1f;&#xff01; 两个星期过去…