当前位置: 首页 > news >正文

C# LINQ

一、前言

   学习心得:C# 入门经典第8版书中的第22章《LINQ》

二、LINQ to XML

我们可以通过LINQ to XML来创造xml文件 如下示例,我们用LINQ to XML来创造。

<Books><CSharp Time="2019"><book>C# 入门经典</book><book>C# 高级编程</book><book>C# 深入解析</book><book>WPF 编程宝典</book></CSharp><Java></Java>
</Books>

第一步引用命名空间

using System;
using System.Xml.Linq;

第二步 示例代码(两种写法)

   static void Main(string[] args){XDocument doc = new XDocument(new XElement("Books", new XElement("Charp", new XAttribute("Time", 2019),new XElement(new XElement("book", "C# 入门编程")),new XElement(new XElement("book", "C# 高级编程")),new XElement(new XElement("book", "深入解析")),new XElement(new XElement("book", "编程宝典"))),new XElement(new XElement("Java", " "))));Console.WriteLine(doc);Console.WriteLine("------分割线--------");XDocument doc2 = new XDocument(new XElement("Books",new XElement("CSharp",new XAttribute("Time", 2019),new[] { new XElement("Book", "C# 入门编程"),new XElement("Book", "C# 高级编程"),new XElement("Book", "深入解析"),new XElement("Book", "编程宝典")        }),new XElement("Java")));Console.WriteLine(doc2);Console.ReadLine();}

执行效果:

三、LINQ查询语法

LINQ查询语法可以帮助我们快速的查询我们想要的数据,对集合数组都管用。

第一步引用:

using System;
using System.Linq;

第二步(示例代码) 

        string[] chineseStrings = {
"你好", "世界", "学习", "编程", "科技",
"创新", "发展", "梦想", "努力", "成就",
"希望", "未来", "探索", "挑战", "实现"};var L = from n in chineseStrings where n.Contains("习") select n;foreach (var l in L) { Console.WriteLine(l); }Console.ReadLine();

示例解释:LINQ 查询语法来查找 chineseStrings 数组中包含特定字符("习")的成员,并将结果存储在变量 L 中。这里的 from 关键字用于指定集合中的元素,where 关键字用于筛选满足特定条件的元素,select 则用于选择要返回的内容。

四、LINQ方法语法

上述代码我们可以使用扩展方法来实现同样效果。使用Where<T> 方法

举个例子:

        string[] chineseStrings = {
"你好", "世界", "学习", "编程", "科技",
"创新", "发展", "梦想", "努力", "成就",
"希望", "未来", "探索", "挑战", "实现"};//var L = from n in chineseStrings where n.Contains("习") select n;var L= chineseStrings.Where(n => n.Contains("习"));foreach (var l in L) { Console.WriteLine(l); }Console.ReadLine();

示例解释:通过chineseStrings“.”就能看见很多可以使用的扩展方法。

五、LINQ排序查询结果

orderby 子句 orderby默认排序是A-Z 但如果加入了descending 关键字则代表相反

        string[] chineseStrings = {
"啊", "吧", "从", "的", "额",
"发", "就", "和", "就",
"看", "了", "吗", "你", "哦"};var L = from n in chineseStrings orderby n descending select n;foreach (var l in L) { Console.WriteLine(l); }Console.ReadLine();

当前示例:对数组进行降序排序


输出效果:哦--你--吗--了--看--就--就--和--发--额--的--从--吧--啊--。

当然您可以自定义升序排序(默认不写关键字就是升序)

        string[] chineseStrings = {
"啊", "吧啊", "从啊啊", "的啊啊啊", "额啊啊啊啊",
"发啊啊啊啊啊"};var L = from n in chineseStrings orderby n.Length select n;foreach (var l in L) { Console.WriteLine(l); }Console.ReadLine();

 执行效果: 

六、聚合运算符

        聚合函数是指用于对一组数据执行计算,并返回单个结果的函数。这些函数通常用于对数据集合进行汇总、计数、平均值、最大值、最小值等操作。LINQ(Language Integrated Query)是 C# 中处理集合的强大工具之一,它提供了一系列的聚合函数可以应用在查询中。


using System;
using System.Linq;
namespace My
{class Program{static void Main(string[] args){int[] fiftyElementArray = new int[50] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30,31, 32, 33, 34, 35, 36, 37, 38, 39, 40,41, 42, 43, 44, 45, 46, 47, 48, 49, 50
};Console.WriteLine($"数组元素个数{fiftyElementArray.Count()}");Console.WriteLine($"平均值{fiftyElementArray.Average()}");Console.WriteLine($"最小值{fiftyElementArray.Min()}");Console.WriteLine($"最大值{fiftyElementArray.Max()}");Console.WriteLine($"总和{fiftyElementArray.Sum()}");Console.ReadLine();}}
}

示例解释:

        创建了一个包含 1 到 50 的整数数组,并使用 LINQ 的聚合函数计算了各种统计信息。当你运行这段代码时,它会输出数组的元素个数、平均值、最小值、最大值和总和。 

七、单值选择查询

单值查询顾名思义就是返回结果不返回重复的值。

举个例子:

using System;
using System.Linq;
namespace My
{class Program{static void Main(){Student[] students = {new Student { ClassID = 10, Name = "张三" },new Student { ClassID = 10, Name = "李四" },new Student { ClassID = 11, Name = "王五" },new Student { ClassID = 11, Name = "赵六" },new Student { ClassID = 12, Name = "钱七" }};var student = (from m in students select m.ClassID).Distinct();foreach (var item in student){Console.WriteLine(item);}Console.ReadLine();}class Student{public string Name { get; set; }public int ClassID { get; set; }}}
}

示例解释:

         使用 LINQ 查询语法从学生数组中选择每个学生的 ClassID 属性,并使用 Distinct() 方法获取不重复的 ClassID 值,然后在控制台输出这些值。Distinct() 方法是 LINQ 提供的一个方法,用于在序列中筛选出不重复的元素,即返回序列中唯一的元素。当然您也可以使用扩展方法Select 。举个例子:var student = students.Select(m=> m.ClassID).Distinct();

八、多级排序

        多级排序指的是按照多个条件进行排序。通过LINQ查询表达式和orderby关键字可以轻松实现多级排序

举个例子:

using System;
using System.Collections.Generic;
using System.Linq;
namespace My
{class Program{static void Main(){List<Person> people = new List<Person>{new Person("Alice", 25),new Person("Bob", 30),new Person("Charlie", 35),new Person("David", 40),new Person("Eve", 45)};//按年龄排序后按姓名长度降序排序var LL= from o in people orderby o.Age  orderby o.Name.Length descending select o;foreach(Person o in LL){Console.WriteLine(o.Name);}Console.ReadLine();}}class Person{public string Name { get; set; }public int Age { get; set; }public Person(string name, int age){Name = name;Age = age;}}
}

示例解释:

        使用LINQ进行多级排序的示例。我创建了一个List<Person>对象,并使用LINQ进行排序操作。首先按照年龄升序排序,然后在年龄相同时按照姓名长度降序排序。最后,使用循环遍历排序后的结果,并输出每个人的姓名。

九、分组查询

using System.Collections.Generic;
using System.Linq;
namespace My
{class Program{static void Main(){List<Student> students = new List<Student>{new Student { Name = "Alice", Age = 18 },new Student { Name = "Bob", Age = 20 },new Student { Name = "Charlie", Age = 18 },new Student { Name = "David", Age = 19 },new Student { Name = "Eve", Age = 20 },new Student { Name = "Eve", Age = 40 }};//按照名称分组// var temp = from student in students group student by student.Name;//按照年龄对学生进行分组,并按照分组后的平均年龄进行排序。var temp2 = from student in students group student by student.Age into AGe select new { AvgAge = AGe.Average(n => n.Age), AGe.Key };var temp3 = from student in temp2 orderby student.AvgAge select student;}}class Student{public string Name { get; set; }public int Age { get; set; }}
}

示例解释:

        当前代码 temp2  这段赋值代码的意思是,LINQ对students数组进行操作,group student  是对当前对象进行分组操作 by student.Age 对当前student.Age 的值来进行分组 into AGe 是返回一个新的结果集,然后对这个新的结果集 创建了一个匿名对象new { AvgAge = AGe.Average(n => n.Age), AGe.Key };我们之前的写法都是返回当前的结果集,但我们这里创建了一个匿名对象 对象中有两个值 一个值是计算当前结果集的平均值n => n.Age是值具体计算的平均值成员,然后赋值给匿名类型AvgAge  ,这个匿名对象的第一个值,第二个值是当前的键,也就是可以理解为分组的的组名,最后返回给Temp2。temp3 则是对temp2的结果中的平均值进行一个升序排序。

数据最后效果:

十、Join查询

可以用一个查询将两个集合当中的相同数据 用关键字进行连接。

举个例子:

using System;
using System.Collections.Generic;
using System.Linq;class Person
{public string Name { get; set; }public int Age { get; set; }
}class Person2
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(string[] args){List<Person> people = new List<Person>{new Person { Name = "张三", Age = 30 },new Person { Name = "李四", Age = 25 },new Person { Name = "老六", Age = 35 }};List<Person2> people2 = new List<Person2>{new Person2 { Name = "张三三", Age = 30 },new Person2 { Name = "李四四", Age = 25 },new Person2 { Name = "老六六", Age = 35 }};var Temp = from p in people join o in people2 on p.Age equals o.Age select new { BigName = p.Name, SmallName = o.Name, p.Age }; foreach (var result in Temp){Console.WriteLine(result);}Console.ReadLine();}
}

示例解释:

        使用LINQ查询语法进行连接操作,并选择一些属性进行输出。

var Temp = from p in people join o in people2 on p.Age equals o.Age select new { BigName = p.Name, SmallName = o.Name, p.Age }; 

        在peoplepets这两个对象列表之间,通过比较Person类的Age属性和Pet类的Age属性,找到相等的项,并将Person类的Name属性、Pet类的Name属性以及Person类的Age属性作为结果进行输出。

执行效果:

相关文章:

C# LINQ

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第22章《LINQ》 二、LINQ to XML 我们可以通过LINQ to XML来创造xml文件 如下示例&#xff0c;我们用LINQ to XML来创造。 <Books><CSharp Time"2019"><book>C# 入门经典</book><…...

云原生机器学习平台cube-studio开源项目及代码简要介绍

1. cube-studio介绍 云原生机器学习平台cube-studio介绍&#xff1a;https://juejin.cn/column/7084516480871563272 cube-studio是开源的云原生机器学习平台&#xff0c;目前包含特征平台&#xff0c;支持在/离线特征&#xff1b;数据源管理&#xff0c;支持结构数据和媒体标…...

大小端存储是什么鬼?

以下内容为本人的著作&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/htYGddzO2xPl9kDN4lANpQ 大小端存储的划分是为了解决长度大于一个字节的数据类型内容在存储地址上以不同顺序分布的问题。 比如16位的short整形&…...

WEB:探索开源PDF.js技术应用

1、简述 PDF.js 是一个由 Mozilla 开发的开源 JavaScript 库&#xff0c;用于在浏览器中渲染 PDF 文档。它的目标是提供一个纯粹的前端解决方案&#xff0c;摆脱了依赖插件或外部程序的束缚&#xff0c;使得在任何支持 JavaScript 的浏览器中都可以轻松地显示 PDF 文档。 2、…...

数据分析之词云图绘制

试验任务概述&#xff1a;如下为所给CSDN博客信息表&#xff0c;分别汇总了ai, algo, big-data, blockchain, hardware, math, miniprog等7个标签的博客。对CSDN不同领域标签类别的博客内容进行词频统计&#xff0c;绘制词频统计图&#xff0c;并根据词频统计的结果绘制词云图。…...

【赠书第13期】边缘计算系统设计与实践

文章目录 前言 1 硬件架构设计 2 软件框架设计 3 网络结构设计 4 安全性、可扩展性和性能优化 5 推荐图书 6 粉丝福利 前言 边缘计算是一种新兴的计算模式&#xff0c;它将计算资源推向网络边缘&#xff0c;以更好地满足实时性、低延迟和大规模设备连接的需求。边缘计算…...

数据库01_增删改查

1、什么是数据&#xff1f;什么是数据库&#xff1f; 数据&#xff1a;描述事物的符号记录称为数据。数据是数据库中存储的基本对象。数据库&#xff1a;存放数据的仓库&#xff0c;数据库中可以保存文本型数据、二进制数据、多媒体数据等数据 2、数据库的发展 第一阶段&…...

MySQL——进阶篇

二、进阶篇&#x1f6a9; 1. 存储引擎&#x1f346; 1.1 MSQL体系结构 连接层&#xff1a; 连接处理&#xff0c;连接认证&#xff0c;每个客户端的权限 服务层&#xff1a; 绝大部分核心功能&#xff0c;可跨存储引擎 可插拔存储引擎&#xff1a; 需要的时候可以添加或拔掉…...

Python 网络编程之搭建简易服务器和客户端

用Python搭建简易的CS架构并通信 文章目录 用Python搭建简易的CS架构并通信前言一、基本结构二、代码编写1.服务器端2.客户端 三、效果展示总结 前言 本文主要是用Python写一个CS架构的东西&#xff0c;包括服务器和客户端。程序运行后在客户端输入消息&#xff0c;服务器端会…...

往年面试精选题目(前50道)

常用的集合和区别&#xff0c;list和set区别 Map&#xff1a;key-value键值对&#xff0c;常见的有&#xff1a;HashMap、Hashtable、ConcurrentHashMap以及TreeMap等。Map不能包含重复的key&#xff0c;但是可以包含相同的value。 Set&#xff1a;不包含重复元素的集合&#…...

解决服务器Tab键不能补全问题

编辑~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml 命令&#xff1a;vim ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml替换&#xff1a;<property name“<Super>Tab” type“string” value“switch_window…...

人工智能 机器学习 深度学习:概念,关系,及区别说明

如果过去几年&#xff0c;您读过科技主题的文章&#xff0c;您可能会遇到一些新词汇&#xff0c;如人工智能&#xff08;Artificial Intelligence&#xff09;、机器学习&#xff08;Machine Learning&#xff09;和深度学习&#xff08;Deep Learning&#xff09;等。这三个词…...

数据库——LAMP的搭建及MySQL基操

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机&#xff0c;在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作&#xff1a; &#xff08;1&#xff09;登录 MySQL&#xff0c;在 MySQL 中创建用户&#xff0c;并对…...

抗原设计与兔单B细胞技术的结合-卡梅德生物

随着生物医学研究的不断深入&#xff0c;抗体疗法作为治疗疾病的有力工具逐渐成为研究的焦点。而兔单B细胞技术作为抗体研究的创新方法&#xff0c;其与抗原设计的有机结合为获取定制抗体打开了崭新的创新之路。本文将深入探讨抗原设计与兔单B细胞技术相互融合的原理、优势&…...

在uniapp中使用背景渐变色与背景图不生效问题

list上有文字详情以及背景图&#xff0c;从背景可以看出是渐变色和 背景图片的结合。 因为使用到渐变色&#xff0c;所以要结合 background-blend-mode 属性来实现与背景图片叠加显示&#xff0c;否则只通过 background: linear-gradient(); background-image: url(); 设置不会…...

Java中XML的解析

1.采用第三方开元工具dom4j完成 使用步骤 1.导包dom4j的jar包 2.add as lib.... 3.创建核心对象, 读取xml得到Document对象 SAXReader sr new SAXReader(); Document doc sr.read(String path); 4.根据Document获取根元素对象 Element root doc.getRootElement(); …...

React快速入门之交互性

响应事件 创建事件处理函数 处理函数名常以handle事件名命名 function handlePlayClick() {alert(Playing);}传递事件处理函数 函数名、匿名两种方式&#xff01; function PlayButton() {function handlePlayClick() {alert(Playing);}return (<Button handleClick{handl…...

浅谈WPF之ToolTip工具提示

在日常应用中&#xff0c;当鼠标放置在某些控件上时&#xff0c;都会有相应的信息提示&#xff0c;从软件易用性上来说&#xff0c;这是一个非常友好的功能设计。那在WPF中&#xff0c;如何进行控件信息提示呢&#xff1f;这就是本文需要介绍的ToolTip【工具提示】内容&#xf…...

Android Studio 如何隐藏默认标题栏

目录 前言 一、修改清单文件 二、修改代码 三、更多资源 前言 在 Android 应用中&#xff0c;通常会有一个默认的标题栏&#xff0c;用于显示应用的名称和一些操作按钮。但是&#xff0c;在某些情况下&#xff0c;我们可能需要隐藏默认的标题栏&#xff0c;例如自定义标题栏…...

对于c++的总结与思考

笔者觉得好用的学习方法&#xff1a;模板法 1.采用原因&#xff1a;由于刚从c语言面向过程的学习中解脱出来&#xff0c;立即把思路从面向过程转到面向对象肯定不现实&#xff0c;加之全新的复杂语法与操作&#xff0c;着实给新手学习这门语言带来了不小的困难。所以&#xff…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...

未授权访问事件频发,我们应当如何应对?

在当下&#xff0c;数据已成为企业和组织的核心资产&#xff0c;是推动业务发展、决策制定以及创新的关键驱动力。然而&#xff0c;未授权访问这一隐匿的安全威胁&#xff0c;正如同高悬的达摩克利斯之剑&#xff0c;时刻威胁着数据的安全&#xff0c;一旦触发&#xff0c;便可…...

基于小程序老人监护管理系统源码数据库文档

摘 要 近年来&#xff0c;随着我国人口老龄化问题日益严重&#xff0c;独居和居住养老机构的的老年人数量越来越多。而随着老年人数量的逐步增长&#xff0c;随之而来的是日益突出的老年人问题&#xff0c;尤其是老年人的健康问题&#xff0c;尤其是老年人产生健康问题后&…...

【系统架构设计师-2025上半年真题】综合知识-参考答案及部分详解(回忆版)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20~21题】【第…...

Heygem50系显卡合成的视频声音杂音模糊解决方案

如果你在使用50系显卡有杂音的情况&#xff0c;可能还是官方适配问题&#xff0c;可以使用以下方案进行解决&#xff1a; 方案一&#xff1a;剪映替换音色&#xff08;简单适合普通玩家&#xff09; 使用剪映换音色即可&#xff0c;口型还是对上的&#xff0c;没有剪映vip的&…...

河北对口计算机高考MySQL笔记(完结版)(2026高考)持续更新~~~~

MySQL 基础概念 数据&#xff08;Data&#xff09;&#xff1a;文本&#xff0c;数字&#xff0c;图片&#xff0c;视频&#xff0c;音频等多种表现形式&#xff0c;能够被计算机存储和处理。 **数据库&#xff08;Data Base—简称DB&#xff09;&#xff1a;**存储数据的仓库…...

【Axure高保真原型】图片列表添加和删除图片

今天和大家分享图片列表添加和删除图片的原型模板&#xff0c;效果包括&#xff1a; 点击图片列表的加号可以显示图片选择器&#xff0c;选择里面的图片&#xff1b; 选择图片后点击添加按钮&#xff0c;可以将该图片添加到图片列表&#xff1b; 鼠标移入图片列表的图片&…...