C# Linq 详解三

news2025/1/25 9:08:56

目录

概述

十三、Sum / Min / Max / Average

十四、Distinct

十五、Concat

十六、Join

十七、ToList 

十八、ToArray

十九、ToDictionary


C# Linq 详解一
1.Where
2.Select
3.GroupBy
4.First / FirstOrDefault
5.Last / LastOrDefault

C# Linq 详解二
1.OrderBy 
2.OrderByDescending
3.Skip
4.Take
5.Any
6.All

C# Linq 详解三
1.Sum / Min / Max / Average
2.Distinct
3.Concat
4.Join
5.ToList 
6.ToArray
7.ToDictionary

C# Linq 详解四
1.SelectMany
2.Aggregate
3.DistinctBy
4.Reverse
5.SequenceEqual
6.Zip
7.SkipWhile 
8.TakeWhile

C# Linq 详解一_熊思宇的博客-CSDN博客

C# Linq 详解二_熊思宇的博客-CSDN博客

C# Linq 详解四_熊思宇的博客-CSDN博客

概述

语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。 此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。 借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。

对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。 查询表达式采用声明性查询语法编写而成。 使用查询语法,可以用最少的代码对数据源执行筛选、排序和分组操作。 可使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO .NET 数据集、XML 文档和流以及 .NET 集合中的数据。
 

十三、Sum / Min / Max / Average

计算序列中指定属性的总和、最小值、最大值、平均值。

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
            int sum = numList.Sum();
            Console.WriteLine("总和:{0}", sum);

            int min = numList.Min();
            Console.WriteLine("最小值:{0}", min);

            int max = numList.Max();
            Console.WriteLine("最大值:{0}", max);

            double average = numList.Average();
            Console.WriteLine("平均值:{0}", average);

            Console.ReadKey();
        }
    }
}

运行:

十四、Distinct

Distinct 方法用于从集合中筛选出不重复的元素。它返回一个新的集合,其中包含原始集合中的唯一元素。

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int[] numList = { 1, 2, 2, 3, 3, 4, 5, 5 };
            var distinctNumbers = numList.Distinct();
            foreach (var number in distinctNumbers)
            {
                Console.WriteLine(number);
            }

            Console.ReadKey();
        }
    }
}

运行:

十五、Concat

Concat 方法用于将两个集合合并为一个新的集合。当前方法没有重载函数,通常用在将数组分类后,挑出需要的集合,合并后重新处理。

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int[] numbers1 = { 1, 2, 3 };
            int[] numbers2 = { 4, 5, 6 };
            var mergedNumbers = numbers1.Concat(numbers2);
            foreach (var number in mergedNumbers)
            {
                Console.WriteLine(number);
            }

            Console.ReadKey();
        }
    }
}

运行:

十六、Join

根据两个序列中的关联键,将它们的元素进行匹配。

Join 的用法,在 Linq 中算是比较复杂的了,用起来变化也比较多,这里用一个简单的例子,推荐各位多写多练,多写一些案例,用多了就比较熟了

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<Student> students1 = new List<Student>
            {
                new Student { Id = 1, Name = "柱子" },
                new Student { Id = 2, Name = "李四" },
                new Student { Id = 3, Name = "铁蛋" }
            };
            List<Student> students2 = new List<Student>
            {
                new Student { Id = 1, Name = "张三" },
                new Student { Id = 3, Name = "狗剩" },
                new Student { Id = 5, Name = "二狗" }
            };

            var joinedStudents = students1.Join(students2,
                                                s1 => s1.Id,
                                                s2 => s2.Id,
                                                (s1, s2) => new 
                                                { 
                                                    Name1 = s1.Name, 
                                                    Name2 = s2.Name 
                                                });

            foreach (var student in joinedStudents)
            {
                Console.WriteLine($"Name1: {student.Name1}, Name2: {student.Name2}");
            }

            Console.ReadKey();
        }
    }

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

运行:

在上面 Join 的代码中,首先看下面这两句代码,这里是在两个 List 中,找出一个共同的键,比如 s1 和 s2 都有一个共同的键 Id,这里会判断 Id 的值在两个 List 中是否有相同的值,它查询的结果同样是个集合,在上面代码可以看到,Id 有两个共同的值,1 和 3。

s1 => s1.Id,
s2 => s2.Id,

下面代码是一个 Lambda 表达式,它将 s1 和 s2 作为参数传递到了一个新的对象中,Name1 和 Name2 都是自己定义的字段名,这里可以随意取名字

(s1, s2) => new 
{ 
    Name1 = s1.Name, 
    Name2 = s2.Name 
});

比如,取名成这样,也是不会报错的

找出相同字段的集合后,就可以在这个 Lambda 表达式里重新筛选数据了,我们把鼠标放到 joinedStudents 这里,可以看到是一个叫 'a 的类,这就是上面我们自定义的类

十七、ToList 

将序列转换为List

在上面的很多案例都可以将查询的结果转换为 List,下面来看一个案例,非常简单

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
            List<int> list = numList.Where(x => x > 40).ToList();
            foreach (int num in list)
            {
                Console.WriteLine(num);
            }
            Console.ReadKey();
        }
    }
}

运行:

十八、ToArray

将序列转换为Array

ToArray 和 ToList 用法差不多的,只是转换的结果不一样

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
            int[] ints = numList.Where(x => x > 40).ToArray();
            foreach (int num in ints)
            {
                Console.WriteLine(num);
            }
            Console.ReadKey();
        }
    }
}

运行:

十九、ToDictionary

根据指定的键选择器,将序列转换为字典。

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<People> peopleList = new List<People>()
            {
                new People(){Name="张三", Age=12, Career="学生" },
                new People(){Name="柱子", Age=25, Career="农民" },
                new People(){Name="铁蛋", Age=23, Career="农民" },
                new People(){Name="狗剩", Age=34, Career="职员" },
                new People(){Name="二狗", Age=28, Career="职员" },
            };
            Dictionary<string, People> peopleDictionary = peopleList.ToDictionary(x => x.Name);
            foreach (var kvp in peopleDictionary)
            {
                Console.WriteLine($"Key: {kvp.Key}, Value.Age: {kvp.Value.Age}");
            }

            Console.ReadKey();
        }
    }

    class People
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Career { get; set; }
    }
}

运行:

end

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

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

相关文章

HOT64-搜索二维矩阵

leetcode原题链接&#xff1a;搜索二维矩阵 题目描述 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回…

Leetcode每日一题:979. 在二叉树中分配硬币(2023.7.14 C++)

目录 979. 在二叉树中分配硬币 题目描述&#xff1a; 实现代码与解析&#xff1a; dfs&#xff08;后序遍历&#xff09; 原理思路&#xff1a; 979. 在二叉树中分配硬币 题目描述&#xff1a; 给定一个有 N 个结点的二叉树的根结点 root&#xff0c;树中的每个结点上都对…

宋浩高等数学笔记(一)函数与极限

b站宋浩老师的高等数学网课&#xff0c;全套笔记已记完&#xff0c;不定期复习并发布更新。 章节顺序与同济大学第七版教材所一致。

C++虚函数学习

VC6新建一个单文档工程&#xff1b; 添加一个一般类&#xff1b; 生成的Shape.cpp保持不变&#xff1b; #include "Shape.h"#ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]__FILE__; #define new DEBUG_NEW #endif// // Construction/Destruction //Shap…

Unity平台如何实现RTSP转RTMP推送?

技术背景 Unity平台下&#xff0c;RTSP、RTMP播放和RTMP推送&#xff0c;甚至包括轻量级RTSP服务这块都不再赘述&#xff0c;今天探讨的一位开发者提到的问题&#xff0c;如果在Unity下&#xff0c;实现RTSP播放的同时&#xff0c;随时转RTMP推送出去&#xff1f; RTSP转RTMP…

使用Google Chrome浏览器打开Vue项目报错“Uncaught runtime errors”——已解决

使用Google Chrome浏览器打开Vue项目报错&#xff1a; Uncaught runtime errors:ERROR Identifier originalPrompt has already been declared SyntaxError: Identifier originalPrompt has already been declared问题原因&#xff1a; Google Chrome浏览器安装了插件跟Vue项…

2023年最新水果编曲软件FLStudio21.0.3.3517中文直装完整至尊解版下载

2023年最新水果编曲软件FLStudio21.0.3.3517中文直装完整至尊解版下载 是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室&#xff0c;因为它包含了一个主要的听觉工作场所。 最新fl studio 21有不同的功能&#xff0c;如它包含图形和音乐音序器&#xff0c;帮助…

Nginx Linux设置开机自启动

使用如下命令 vi /lib/systemd/system/nginx.service 创建并编辑文件将以下代码黏贴至此文件中 [Unit] Descriptionnginx Afternetwork.target[Service] Typeforking TimeoutSec0 #防止启动超时 Userroot Grouproot criptionnacos Afternetwork.target[Service] Typeforking T…

哈希的应用(1)——位图

计算机存储单位的常用知识 2^30大约等于10亿 1byte8bit--一个字节等于八个比特位 左移操作符<<表示将值从底地址到高地址的方向移动。 bitset<-1>&#xff0c;开了2^32个bit512MB1GB 位图概念 面试题 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符…

Kerberos协议详解

0x01 kerberos协议的角色组成 Kerberos协议中存在三个角色&#xff1a; 客户端(Client)&#xff1a;发送请求的一方 服务端(Server)&#xff1a;接收请求的一方 密钥分发中心(Key distribution KDC) 密钥分发中心分为两个部分&#xff1a; AS(Authentication Server)&…

Linux下JDK版本与安装版本不一致问题

目录 一. &#x1f981; 前言二. &#x1f981; 操作流程三. &#x1f981; 总结四. &#x1f981; Happy Ending 一. &#x1f981; 前言 最近重新安装了centos7.9,针对以前遇到的Java版本不一致的情况, 提出了另一种方法,该方法简单易行,容易理解。 二. &#x1f981; 操作…

吴恩达机器学习2022-Jupyter1可选实验室: Python 和 Jupyter 笔记本简介

欢迎来到第一个可选实验室&#xff01; 可供选择的实验室包括:提供信息-比如这个笔记本以实际例子加强课堂教材提供分级实验室常规的工作实例 1.1 目标 在本实验中&#xff0c;您将: 对Jupyter笔记本进行简要介绍&#xff0c;参观Jupyter笔记本&#xff0c;了解标记单元格和…

pytorch实现线性回归

转大佬笔记 代码&#xff1a; # -*- coding: utf-8 -*- # Time : 2023-07-14 14:57 # Author : yuer # FileName: exercise05.py # Software: PyCharm import matplotlib.pyplot as plt import torch# x,y是3行1列的矩阵&#xff0c;所以在[]中要分为3个[] x_data torch.…

人物专访 |时静:携手The Open Group,把握时代脉动,助力中国数字经济建设

​ 在由The Open Group主办的2023架构可持续未来峰会上&#xff0c;The Open Group与机械工业出版社进行了战略签约合作仪式&#xff0c;并就备受业界期待的TOGAF标准第10版中文图书发布&#xff0c;以及OPA标准2.1版的本地化工作展开具体合作。 对此&#xff0c;机械工业出版社…

Video Enhancement with Task-Oriented Flow

摘要 Many video enhancement algorithms rely on optical flow to register frames in a video sequence. Precise flow estimation is however intractable; and optical flow itself is often a sub-optimal representation for particular video processing tasks. In thi…

嵌入式linux驱动开发之移远4G模块EC800驱动移植指南

回顾下移远4G模块移植过程&#xff0c; 还是蛮简单的。一通百通&#xff0c;无论是其他4G模块都是一样的。这里记录下过程&#xff0c;分享给有需要的人。环境使用正点原子的imax6ul开发板&#xff0c;板子默认支持中兴和移远EC20的驱动&#xff0c;这里要移植使用的是移远4G模…

在Linux下做性能分析1:基本模型

介绍 本Blog开始介绍一下在Linux分析性能瓶颈的基本方法。主要围绕一个基本的分析模型&#xff0c;介绍perf和ftrace的使用技巧&#xff0c;然后东一扒子&#xff0c;西一扒子&#xff0c;逮到什么说什么&#xff0c;也不一定会严谨。主要是把这个领域的一些思路和技巧串起来。…

Electron + vue 搭建桌面客户端

下载Electron 压缩包&#xff0c;放到本地 Electron 压缩包下载地址 cd ~/Library/Caches/electron

Duilib 父窗口无效化和消息传递

文章目录 1、父窗口无效化和消息传递2、EnableWindow()和SetFocus()的含义和用法 1、父窗口无效化和消息传递 当使用duillib界面库时&#xff0c;我们往往需要建立多个窗口&#xff0c;子窗口和父窗口之间有一定的逻辑需要&#xff0c;比如当子窗口弹出时&#xff0c;让父窗口…

2022 Robocom CAIP 国赛 第二题

原题链接&#xff1a; PTA | 程序设计类实验辅助教学平台 题面&#xff1a; 副本是游戏里的一个特色玩法&#xff0c;主要为玩家带来装备、道具、游戏资源的产出&#xff0c;满足玩家的游戏进程。 在 MMORPG《最终幻想14》里&#xff0c;有一个攻略人数最大达到 48 人的副本“…