C#高级 10 Linq操作

1.Linq操作介绍

Linq操作是C#集成的类似于数据库语言的操作,是通过将数据库的表名映射为类,把数据库的列名映射为属性。
Linq查询主要分为3类:
Linq to object(数组、list集合) --内存里面的数据
Linq to sql(查询数据库用的) --在数据库数据
Linq to XML 查询XML文件
这里主要以第一种为例,下面将会直接以代码+注释的方法来展示第一类方式如何使用linQ进行查询。为方便读者直接复制代码进行运行,就不配置数据库,使用对象的方式来存储数据。下面直接上代码:

在这里插入图片描述
Kongfu.cs内代码如下:

public class Kongfu
{public int Id {  get; set; }public string Name { get; set; }public int Power {  get; set; }public override string ToString(){return string.Format("id:{0}, name:{1}, power:{2}", Id, Name, Power);}
}

MartialArtsMaster.cs内代码如下所示:

public class MartialArtsMaster
{public int Id { get; set; }public string Name { get; set; }public int Age {  get; set; }public string Menpai { get; set; }public string Kongfu {  get; set; }public int Level { get; set; }public override string ToString(){return string.Format("id:{0}, name:{1}, Age:{2}, Menpai:{3}, Kongfu:{4}, Level:{5}",Id,Name,Age,Menpai,Kongfu,Level);}
}

program.cs内代码如下所示,使用了masterList 来存储人物信息,kongFuList 来存储武学信息;
同时下面也列举了,Linq查询的表达式和扩展写法、联合查询、集合查询、排序、分组等多种查询方法。

internal class Program
{static void Main(string[] args){var masterList = new List<MartialArtsMaster>(){//初始化武林高手new MartialArtsMaster() {Id=1,Name="黄蓉",Age=18,Menpai="丐帮",Kongfu="打狗棒法",Level=9},new MartialArtsMaster() {Id=2,Name="洪七公",Age=70,Menpai="丐帮",Kongfu="打狗棒法",Level=10},new MartialArtsMaster() {Id=3,Name="郭靖",Age=22,Menpai="丐帮",Kongfu="降龙十八掌",Level=10},new MartialArtsMaster() {Id=4,Name="任我行",Age=50,Menpai="明教",Kongfu="葵花宝典",Level=1},new MartialArtsMaster() {Id=5,Name="东方不败",Age=35,Menpai="明教",Kongfu="葵花宝典",Level=10},new MartialArtsMaster() {Id=6,Name="林平之",Age=23,Menpai="华山",Kongfu="葵花宝典",Level=7},new MartialArtsMaster() {Id=7,Name="令狐冲",Age=23,Menpai="华山",Kongfu="独孤九剑",Level=10},new MartialArtsMaster() {Id=8,Name="梅超风",Age=23,Menpai="桃花岛",Kongfu="九阴真经",Level=8},new MartialArtsMaster() {Id=9,Name="黄药师",Age=23,Menpai="桃花岛",Kongfu="弹指神通",Level=10}};var kongFuList = new List<Kongfu>(){//初始化功夫new Kongfu(){Id=1,Name="打狗棒法",Power=90},new Kongfu(){Id=2,Name="降龙十八掌",Power=95},new Kongfu(){Id=3,Name="葵花宝典",Power=100},new Kongfu(){Id=4,Name="独孤九剑",Power=100},new Kongfu(){Id=5,Name="九阴真经",Power=100},new Kongfu(){Id=6,Name="弹指神通",Power=100}};//var res = new List<MartialArtsMaster>();//foreach (var temp in masterList)//{//    if (temp.Level > 8)//    {//        res.Add(temp);//    }//}//(1)使用LINQ做查询(表达式写法)var res1 = from m in masterList//from 后面设置查询集合where m.Level > 8 && m.Menpai == "丐帮"//where后面跟上查询条件select m; //表示m的结果结合返回//select m.Name;  //表示值只返回对象中名字集合//(2)扩展写法var res2 = masterList.Where(Test1);//过滤方法static bool Test1(MartialArtsMaster master){if (master.Level > 8){return true;}else {return false;}}//(3)扩展写法var res3 = masterList.Where(m => m.Level > 8 &&m.Menpai == "丐帮");//(4)联合查询var res4 = from m in masterListfrom k in kongFuListwhere m.Kongfu == k.Name && k.Power > 90select m;//select new { master = m, Kongfu = k };//(5)联合查询扩展 masterList.SelectMany(m => kongFuList) 表示 两个对象做联合查询var res5 = masterList.SelectMany(m => kongFuList, (m, k) => new { master = m, kongfu = k }).Where(x => x.master.Kongfu == x.kongfu.Name && x.kongfu.Power > 90);//(6)排序var res6 = from m in masterList//from后面设置查询集合where m.Level > 8 && m.Menpai=="丐帮"  //按照多个属性进行排序,如果字段属性相同,就按照第二个属性排序orderby m.Level,m.Age  select m;var res7 = from m in masterList//from后面设置查询集合where m.Level > 8 && m.Menpai == "丐帮"//按照多个属性进行排序,如果字段属性相同,就按照第二个属性排序orderby m.Age descendingselect m;//使用OrderByDescending 排序var res8 = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮").OrderByDescending(m => m.Age);//ThenBy表示在前面字段相同的情况下使用某个字段排序var res9 = masterList.Where(m => m.Level > 8).OrderBy(m => m.Level).ThenBy(m => m.Age);//(7)集合联合var res10 = from m in masterListjoin k in kongFuList on m.Kongfu equals k.Nameselect new { master = m, kongfu = k };//(8)分组查询 into groups(把武林高手按照所学功夫分类,看一下那个功夫修炼的人数最多)var res11 = from k in kongFuListjoin m in masterList on k.Name equals m.Kongfuinto groupsselect new { kongfu = k, count = groups.Count()};//(9)按自身字段分组 groupvar res12 = from m in masterListgroup m by m.Menpaiinto groups//g.Key Key表示是按那个属性分的组select new { count = groups.Count(), groups.Key };//(10)量词操作符 any all 判断集合中是否满足某个条件bool res13 = masterList.Any(a => a.Menpai == "长留");Console.WriteLine("是否存在“长留”门派:{0}",res13);bool res14 = masterList.All(a => a.Menpai == "丐帮");Console.WriteLine(res14);foreach (var temp in res12){Console.WriteLine(temp);}Console.ReadKey();}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# OpenCvSharp DNN FreeYOLO 人脸检测人脸图像质量评估

目录 效果 模型信息 yolo_free_huge_widerface_192x320.onnx face-quality-assessment.onnx 项目 代码 frmMain.cs FreeYoloFace FaceQualityAssessment.cs 下载 C# OpenCvSharp DNN FreeYOLO 人脸检测&人脸图像质量评估 效果 模型信息 yolo_free_huge_widerfa…

北斗短报文技术在灾区通讯救援中的应用与价值

北斗短报文技术在灾区通讯救援中的应用与价值 随着全球化的进程和科技的快速发展&#xff0c;人类社会在取得巨大经济成果的同时&#xff0c;也面临了许多自然灾害的挑战。地震、洪水、台风等天灾频繁发生&#xff0c;严重威胁着人们的生命财产安全。灾害发生时&#xff0c;及…

Qt/C++音视频开发63-设置视频旋转角度/支持0-90-180-270度旋转/自定义旋转角度

一、前言 设置旋转角度&#xff0c;相对来说是一个比较小众的需求&#xff0c;如果视频本身带了旋转角度&#xff0c;则解码播放的时候本身就会旋转到对应的角度显示&#xff0c;比如手机上拍摄的视频一般是旋转了90度的&#xff0c;如果该视频文件放到电脑上打开&#xff0c;…

Zabbix“专家坐诊”第223期问答汇总

来源&#xff1a;乐维社区 问题一 Q&#xff1a;Zabbix 5.0安装完mysql之后怎么备份&#xff1f;忘记mysql当时创建的密码了&#xff0c;怎么样能查看设置的密码&#xff1f; A&#xff1a;mysql初始化密码在 /var/log/mysqld.log中可以看到&#xff0c;搜关键字temporary pas…

Python爬虫基础:使用Scrapy库初步探索编程零基础可以学么?

Scrapy是Python中最流行的网页爬虫框架之一&#xff0c;强大且功能丰富。通过Scrapy&#xff0c;你可以快速创建一个爬虫&#xff0c;高效地抓取和处理网络数据。在这篇文章中&#xff0c;我们将介绍如何使用Scrapy构建一个基础的爬虫。 一、Scrapy简介及安装 Scrapy是一个用…

【Python】 python简介开发环境

1. python简介 Python是由荷兰人吉多范罗苏姆 (Guido von Rossum&#xff0c;后面称呼为Guido,"龟叔“)发明的一种编程语言&#xff0c;是目前世界上最受欢迎和拥有最多用户群体的编程语言。 (1).Python的历史 1.1989年圣诞节:Guido开始写Python语言的编译器。 2.1991年…

2024年中职网络安全——Windows操作系统渗透测试(Server2105)

Windows操作系统渗透测试 任务环境说明&#xff1a; 服务器场景&#xff1a;Server2105服务器场景操作系统&#xff1a;Windows&#xff08;版本不详&#xff09;&#xff08;封闭靶机&#xff09;需要环境加Q 目录 1.通过本地PC中渗透测试平台Kali对服务器场景进行系统服务…

JUC Lock 读写锁

文章目录 ReentrantReadWriteLock^1.5^ 读写锁ReentrantReadWriteLock 继承关系图示例 1示例 2先获取读锁再获取写锁先获取写锁再获取读锁锁降级 总结 StampedLock^1.8^ &#xff08;邮戳锁&#xff09;基本使用示例1示例2示例3StampedLock 源码文档上的示例 ReentrantReadWrit…

【Flutter 开发实战】Dart 基础篇:常用运算符

在Dart中&#xff0c;运算符是编写任何程序的基本构建块之一。本文将详细介绍Dart中常用的运算符&#xff0c;以帮助初学者更好地理解和运用这些概念。 1. 算术运算符 算术运算符用于执行基本的数学运算。Dart支持常见的加、减、乘、除、整除以及取余运算。常见的算数运算符如…

虽迟但到!MySQL 可以用 JavaScript 写存储过程了!

任何能用 JavaScript 来干的事情&#xff0c;最终都会用 JavaScript 来干 背景 不久前&#xff0c;Oracle 在 MySQL 官方博客官宣了在 MySQL 中支持用 JavaScript 来写存储过程。 最流行的编程语言 最流行的数据库。程序员不做选择&#xff0c;当然是全都要。 使用方法 用 J…

TikTok年度消费价值洞察:捕获跨境电商新机遇

2023年无疑是充满变化和挑战的一年&#xff0c;TikTok落地全球的过程十分坎坷&#xff0c;从曾经被封杀禁停的低迷&#xff0c;到现在重启复苏的大快人心&#xff0c;可谓是“柳暗花明又一村”。 在TikTok全球市场逐渐回暖的情况下&#xff0c;各国民众消费信心得到提振&#x…

无人直播系统源码--抖音、快手、美团、小红书等多平台开发

核心技术 1. AI自动直播&#xff1a; 智能系统通过丰富可定制的文案库&#xff0c; 拥有有料有趣的灵魂。不仅能自动语音讲解内容&#xff0c;还可以在直播中和用户灵活互动。直播中可将团购商品同话术自动上下架。 2. AI剪辑 可一键智能批量成片&#xff0c;也可跟着模板剪…