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属性作为结果进行输出。

执行效果:

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

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

相关文章

Quadratic Assignment Problem 二次分配问题

1 问题定义 二次分配问题&#xff08;Quadratic Assignment Problem&#xff0c;QAP&#xff09;是一种组合优化问题&#xff0c;涉及确定将设施分配到位置的最优方案。它的目标是找到最佳分配&#xff0c;以最小化设施对之间的总成本或距离&#xff0c;考虑到它们之间的相互作…

枚举(蓝桥杯备赛系列)acwing版

枚举 前言 hello&#xff0c;大家好&#xff0c;前面一段时间已经是把acwing Linux基础课讲完了&#xff0c;其实那些内容完全可以带领小白入门Linux我说过如果有人留言要Linux和Windows server 配置DNS Web ftp 的内容我就做一期&#xff0c;但是没人留言我也就先不自作多情了…

SpringSecurity6 | 退出登录后的跳转

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容: SpringSecurity6 | 登录失败后的JSON处理 📚个人知识库: Leo知识库,…

联想发布天禧AI生态四端一体战略,聚焦智能体小程序开发

12月26日&#xff0c;2023联想天禧AI生态伙伴大会在北京正式召开&#xff0c;联想与英特尔、百度、网易有道等头部企业、400余家行业开发者和媒体齐聚一堂&#xff0c;以“AI生态 共赢未来”为主题&#xff0c;共同探讨未来AI生态发展及应用。联想集团副总裁、中国区消费业务群…

如何优化SEO的网站架构

通过优先考虑网站架构来提升你的SEO游戏–这是经常被忽视的有机性能的动力源。了解为什么清晰的结构至关重要&#xff0c;并获得对 SEO 友好的网站的提示。 当人们谈论高优先级的SEO活动时&#xff0c;他们通常会指出关键词研究、内容规划和链接建设等关键领域。 网站架构很少…

Text to image论文精读 TISE (Text-to-Image Synthesis Evaluation):用于文本到图像合成的评估度量工具包

TISE (Text-to-Image Synthesis Evaluation)是一款用于评估文本生成图像的Python评估工具箱。文章由Tan M. Dinh, Rang Nguyen, and Binh-Son Hua等人发表。 其以统一的方式促进、倡导公平的评估度量&#xff0c;并为未来的文本到图像综合研究提供可重复的结果。 文章链接&am…

医院手术麻醉系统源码,基于PHP、 js 、mysql、laravel、vue2技术开发,实现患者数据的自动采集和医疗文书自动生成

手麻系统作为医院信息化系统的一环&#xff0c;由监护设备数据采集系统和麻醉信息管理系统两个子部分组成。手麻信息系统覆盖了患者术前、术中、术后的手术过程&#xff0c;可以实现麻醉信息的电子化和手术麻醉全过程动态跟踪。 以服务围术期临床业务工作的开展为核心&#xf…

Android Studio问题解决:java.lang.NoSuchMethodException

文章目录 一、遇到问题二、分析与思考三、解决问题 一、遇到问题 java.lang.NoSuchMethodException: com.zkteco.android.biometric.b.a.ajni方法调用不到 二、分析与思考 新建了一个最简单的demo发现问题依旧 三、解决问题 通过交叉对比&#xff0c;最后发现是minifyEnable…

数据结构思维导图

数据结构思维导图&#xff0c;目前先写这些&#xff0c;后续有更新会继续。 1 数据结构思维导图

redis 从0到1完整学习 (七):ZipList 数据结构

文章目录 1. 引言2. redis 源码下载3. zipList 数据结构3.1 整体3.2 entry 数据结构分析3.3 连锁更新 4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&am…

让马达转动起来(motor)

代码&#xff1a; #include "reg51.h"sbit P2_0 P2^0; sbit P2_7 P2^7;void main(){while(1){P2_0 1;P2_7 0;} } 仿真&#xff1a; 介绍&#xff1a; 当2.0和2.7端口均为低电平或高电平时&#xff0c;马达保持不转动&#xff1b; 当2.0和2.7端口分别为高电平和…

数据库开发之内连接和外连接的详细解析

1.2 内连接 内连接查询&#xff1a;查询两表或多表中交集部分数据。 内连接从语法上可以分为&#xff1a; 隐式内连接 显式内连接 隐式内连接语法&#xff1a; select 字段列表 from 表1 , 表2 where 条件 ... ; 显式内连接语法&#xff1a; select 字段列表 …

ElasticSearch之RestClient笔记

1. ElasticSearch 1.1 倒排索引 1.2 ElasticSearch和Mysql对比 1.3 RestClient操作 导入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.15.…

带大家做一个,易上手的家常辣椒炒香肠

搞两根香肠 我这里选择的哈尔滨红肠 切成片 打开下图这么大块姜 三瓣蒜 姜蒜切小片 三分之一个大葱 切段 一个螺丝椒 螺丝椒切片 起锅烧油 下葱姜蒜翻炒 翻炒一会儿 然后下入螺丝椒 翻炒出辣椒的辣味后 倒入一勺生抽调味 翻炒均匀后下入香肠 翻炒个几分钟 就可以放入…

Github项目推荐:快写鸭

项目地址 GitHub - oncework/kuaixieya: 「快写鸭」是一款专为开发者开发的一站式写作、管理、发布的更简单且下载即用的效率工具&#xff0c;去除繁琐配置但又极具丰富且自定义性质等功能。 项目简介 这是一个多平台的内容分发工具。可以用来加快博文的多平台发布。 项目截…

jar 运行清单文件MANIFEST.MF生成定义Main-Class Premain-Class IDEA maven-assembly-plugin

可运行jar文件中的启动清单文件 META-INF/MANIFEST.MF 内容自定义生成 清单文件中的 Main-Class: Premain-Class: Can-Retransform-Classes: 在maven-assembly-plugin插件中的生成配置如下, 注意命名 <archive> <manifest> <mainClass>c…

记一次接口交互is开头的属性序列化后“is”丢失问题

问题背景&#xff1a; 今天在做项目联调时调用别人的第三方接口时&#xff0c;发现字段传递不对导致参数传递异常的问题&#xff0c;当时还很奇怪&#xff0c;明白传好着呢&#xff0c;怎么就好端端的出现字段不对的情况呢&#xff1f; 查看发现该字段为boolean类型的isIsRef…

龙蜥开源操作系统能解决CentOS 停服造成的空缺吗?

龙蜥开源操作系统能解决CentOS 停服造成的空缺吗&#xff1f; 本文图片来源于龙蜥&#xff0c;仅做介绍时引用用途&#xff0c;版权归属龙蜥和相关设计人员。 一、《国产服务器操作系统发展报告&#xff08;2023&#xff09;》称操作系统已步入 2.0 时代&#xff0c;服务器操作…

【C语言刷题每日一题】一维数组的交换

目录 问题描述 思路分析 代码实现 结果测试 问题描述 将两个整型一维数组的元素进行交换 如果两个数组长度相同就全部交换&#xff1b; 如果两个数组长度不同&#xff0c;则交换长度相同部分的元素 思路分析 为了代码的复用&#xff0c;这里通过函数来实现&#xff0c;…

【QML-对话框】

QML编程指南 VX&#xff1a;hao541022348 弹出类DialogDrawerFileDialog文件对话框 &#x1f3b3;FontDialog字体对话框 &#x1f6b4;ColorDialog 颜色对话框 &#x1f3ca;MessageDialog 消息提示框 &#x1f429; 弹出类 Dialog 对话框是一种弹出式对话框&#xff0c;主要…