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 == 0
                  select 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 numbers
                          where item1 + item2 == 4
                          select 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 numbers
                     where item1 + item2 == 4
                     select (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 ascending
                  select item1;

    Console.WriteLine(JsonConvert.SerializeObject(numLinq));

    //降序
    var numLinq2 = from item1 in numbers
                  orderby item1 descending
                  select 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 persons
              group 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 person1
              join item2 in person2 on item1.Id  equals item2.Id
              select 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详解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rust异步实现(偏应用少理论不头疼版)

文章目录 1 添加依赖2 示例3 tokio异步实现机制概要 参考资料&#xff1a;&#xff08; 想要进步理解可以看这个 ↓ &#xff09; https://www.bilibili.com/video/BV16r4y187P4/?spm_id_from333.788.recommend_more_video.1&vd_source20edf767ec72b97832bba2fc3aca50b8 R…

原型对象与对象原型,理解Function与Array和Object,在instanceof下的关联

面向过程与面向对象 面向过程时一步一步去做一件事&#xff0c;面向对象是多个功能组合在一起&#xff0c;去完成这件事。 面向对象的特性&#xff1a;继承性&#xff0c;封装性&#xff0c;多态性 通过概述应该知道面向过程和面向对象的优缺点 封装性 大家要玩游戏&#x…

如何使用手机公网远程访问本地群辉Video Station中视频文件【内网穿透】

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1.使用环境要求&#xff1a;2.下载群晖videostation&am…

三段低THD线性恒流控制芯片SM2256E:适用于印度球泡灯9W@230Vac

三段低THD线性恒流控制芯片SM2256E是一款专为印度球泡灯、GU10 LED 球泡灯、射灯、LED 蜡烛灯等设计的电子元件。它采用了先进的控制技术&#xff0c;实现了对电流的精准控制&#xff0c;从而有效地降低了总谐波失真&#xff08;THD&#xff09;。 SM2256E参数 该芯片的主要特…

蓝桥杯省赛无忧 STL 课件12 vector

01 vector的定义和特性 02 vector的常用函数 03 vector排序去重 示例&#xff1a; #include<bits/stdc.h> using namespace std; int main(){vector<int> vec {5,2,8,1,9};sort(vec.begin(),vec.end());for(const auto& num : vec){cout<<num<<&q…

Spring Boot自动装配

前言 自动装配是 Spring Boot 最核心的功能之一&#xff0c;第三方可以基于这个特性非常方便的和 Spring 做整合&#xff0c;实现自己的 Starter&#xff0c;做到开箱即用。 Java 早期并不支持注解&#xff0c;所以那会儿 Spring 只能通过 xml 的形式来配置。早期项目里要引入…

[Vulnhub靶机] DriftingBlues: 6

[Vulnhub靶机] DriftingBlues: 6靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues6_vh.ova 靶机地址&#xff1a;192.168.67.25 攻击机地址&#xff1a;192.168.67.3 一、信息收集 …

分布式限流和本地限流那些事?

分布式限流和本地限流的目的是一样的&#xff0c;当然我建议技术人在自己的服务中优先考虑本地限流&#xff0c;那样对于自己的API的影响会小一点。 限流这种技术&#xff0c;在没有触发限流的阈值的时候&#xff0c;是不会有什么大的问题的&#xff0c;当时一旦触发阈值&…

在树莓派OS Bookworm中如何安装Python包

树莓派OS "Bookworm"版本&#xff0c;用于树莓派5上&#xff0c;更改了安装Python模块的方法。 关键要点&#xff1a; 1&#xff09;树莓派OS Bookworm需要在一个虚拟环境中安装Python包来防止与Python的系统版本发生冲突。 2&#xff09;你可以使用apt包管理器来搜…

如何在群辉NAS使用Docker搭建容器魔方并实现无公网ip远程访问

文章目录 1. 拉取容器魔方镜像2. 运行容器魔方3. 本地访问容器魔方4. 群辉安装Cpolar5. 配置容器魔方远程地址6. 远程访问测试7. 固定公网地址 本文主要介绍如何在群辉7.2版本中使用Docker安装容器魔方&#xff0c;并结合Cpolar内网穿透工具实现远程访问本地网心云容器魔方界面…

商品源数据如何采集,您知道吗?

如今&#xff0c;电子商务已经渗透到了人们生活的方方面面。2020年新冠肺炎突如其来&#xff0c;打乱了人们正常的生产生活秩序&#xff0c;给经济发展带来了极大的影响。抗击疫情过程中&#xff0c;为避免人员接触和聚集&#xff0c;以“无接触配送”为营销卖点的电子商务迅速…

【数据结构】7大排序最详细

0.前言 接下来进入排序&#xff0c;我们知道在c语言阶段可能就学习过了像冒泡排序&#xff0c;选择排序这种比较简单的排序&#xff0c;那么接下来我们就会学习到更加高级的排序算法。但高级代表着难度的提升&#xff0c;但不用担心&#xff0c;博主会细细来谈&#xff0c;慢慢…

使用Rider C# Dll工程和Unity工程互相调用、断点方法

总体流程 创建C# Dll工程&#xff0c;生成C#工程Dll 创建Unity工程 Unity调用C#工程的代码 C#工程调用Unity工程的代码 断点方法 创建C# Dll工程&#xff0c;生成C#工程Dll 创建工程 选这个&#xff0c;注意UnityEngineDll这个选项&#xff0c;要选你目标unity版本的Dll…

【【深入浅出了解静态时钟分析和时钟约束】】

深入浅出了解静态时钟分析和时钟约束 时序分析是什么&#xff1f; 我们提出一些特定的时序要求&#xff08;或者说是添加特定的时序约束&#xff09;&#xff0c;使用特定的时序模型&#xff0c;针对特定的电路进行分析。分析的最终结果是要求系统时序满足我们提出的要求。 这…

MySQL的三种存储引擎 InnoDB、MyISAM、Memory

InnoDB 1). 介绍 InnoDB是一种兼顾高可靠性和高性能的通用存储引擎&#xff0c;在 MySQL 5.5 之后&#xff0c;InnoDB是默认的MySQL 存储引擎。 2). 特点 DML操作遵循ACID模型&#xff0c;支持事务&#xff1b; 行级锁&#xff0c;提高并发访问性能&#xff1b; 支持外键F…

云渲染是什么?云渲染有什么用?云渲染对本地的渲染的影响有哪些?

如果你曾经在深夜加班&#xff0c;眼睁睁看着电脑显卡冒着烟、渲染器哭着喊着把你的CPU和GPU当成磨盘来使用&#xff0c;那么你可能会对云渲染心生向往。毕竟&#xff0c;谁不想在享用最新游戏画面和电影级效果的同时&#xff0c;不用忍受电脑发热、卡顿等问题呢&#xff1f; 云…

What does “grep -i“ do?

grep&#xff08; Global Regular Expression Print &#xff09;根据 给定的正则表达式 搜索文本&#xff0c;并将匹配的行打印出来 grep -i 表示查找的过程中忽略大小写 在已安装的rpm包里&#xff0c;查询是否有tree相关的包 rpm -qa | grep -i "tree"在文件中搜…

在Vivado下利用Tcl实现IP的高效管理

在Vivado下利用Tcl实现IP的高效管理https://cloud.tencent.com/developer/article/1736645 在Vivado下&#xff0c;有两种方式管理IP。一种是创建FPGA工程之后&#xff0c;在当前工程中选中IP Catalog&#xff0c;生成所需IP&#xff0c;这时相应的IP会被自动添加到当前工程中&…

一键去背景怎么去?使用这些智能抠图软件即可已经去背景

作为一名设计师&#xff0c;我们的工作不仅仅是追逐创意的火花&#xff0c;为品牌和产品打造独特的形象。在美好的表象之下&#xff0c;有一项常常让我们苦恼的“必修课”——抠图。抠图是设计过程中不可或缺的一环&#xff0c;它要求我们对图像进行精细的处理&#xff0c;以确…

2019年认证杯SPSSPRO杯数学建模D题(第一阶段)5G时代引发的道路规划革命全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 5G下十字路口车辆通行效率的讨论和建模 D题 5G时代引发的道路规划革命 原题再现&#xff1a; 忙着回家或上班的司机们都知道交通堵塞既浪费时间又浪费燃料&#xff0c;甚至有的时候会带来情绪上的巨大影响&#xff0c;引发一系列的交通问题。…