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 拟解决…

【HDFS】想不到NameNode的异步EditLog竟然这么多细节

文末会总结异步edit log实现里的细节: 1、Edit对象什么时候为RpcEdit?什么时候为SyncEdit? 2、enqueueEdit里,阻塞队列满导致插入失败进行限流时,针对线程是否持有当前对象锁做了不同处理,那么什么时候持有锁?什么时候没持有锁呢? 3、SyncEdit的生成 4、怎么启动FSEdit…

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)

面试经典题---68.文本左右对齐

68.文本左右对齐 我的解法&#xff1a; 两层while循环嵌套&#xff0c;外层循环用于处理不同行&#xff0c;内层while循环计算出每行应有的单词个数。 使用left和right记录一行中应有的单词下标&#xff0c;即当前行应包含从words[left]到words[right-1]这count个单词&#xf…

C端接口安全性设计

针对C端接口&#xff0c;app未登录也可以查询数据的需求点&#xff1b;从安全角度上仍然需要进行校验&#xff1a; 方案一&#xff1a; 后期http 修改为 https&#xff1b; 方案二&#xff1a; Aop切面需要的接口&#xff1b;客户端和后端都执行以下规则&#xff1a; 1.客…

第28关 k8s监控实战之Prometheus(七)

大家好&#xff0c;我是博哥爱运维。 今天继续Prometheus的课程&#xff0c;在之前的几节课里面&#xff0c;我带大家认识并部署了prometheus服务&#xff0c;并将一些服务做好了监控&#xff0c;同时通过grafana展示监控数据图表出来。对于怎么使用promql语法&#xff0c;也教…

XML的用途之一:XML把数据从HTML分离

XML 应用于 web 开发的许多方面&#xff0c;常用于简化数据的存储和共享。 XML 把数据从 HTML 分离 如果你需要在 HTML 文档中显示动态数据&#xff0c;那么每当数据改变时将花费大量的时间来编辑 HTML。 通过 XML&#xff0c;数据能够存储在独立的 XML 文件中。这样你就可以…

【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有…

2024.1.11力扣每日一题——构造有效字符串的最少插入数

2024.1.11 题目来源我的题解方法一 暴力模拟方法二 动态规划方法三 直接拼接方法四 计算组数 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2645 我的题解 方法一 暴力模拟 直接模拟&#xff0c;根据题意可知 若是abc则不用插入&#xff0c;若是ab,ac,bc这需要 插入一…

ESP32S3+HX8347+RGB运行LVGL例程

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

油烟净化器餐饮油烟污染“克星”

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 随着人们生活水平的提高&#xff0c;餐饮业也得到了快速发展。然而&#xff0c;餐饮油烟污染也成为了人们关注的焦点。 油烟…

超维空间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;转换器…

git branch 用法汇总和实际使用用例

文章目录 Git 分支操作的基础用法上述 Git 分支操作命令 Git 分支操作的基础用法 查看分支&#xff1a; git branch&#xff1a;列出所有本地分支。git branch -r&#xff1a;列出所有远程分支。git branch -a&#xff1a;同时列出本地和远程所有分支。 创建分支&#xff1a; …