跟着AI学习C# Day12

📅 Day 12:LINQ(Language Integrated Query)基础

✅ 目标:

  • 理解 LINQ 的基本概念和作用;
  • 掌握使用 LINQ 查询集合(如 List<T>Array);
  • 学会使用常用 LINQ 方法:Where, Select, OrderBy, GroupBy, First, Any, Count 等;
  • 能够编写查询语句实现数据筛选、排序、投影等操作;
  • 编写一个简单的 LINQ 查询程序,例如学生信息查询系统。

🔍 什么是 LINQ?

LINQ(Language Integrated Query) 是 C# 中用于统一查询各种数据源(如数组、集合、数据库、XML 等)的语法。它将查询能力直接集成到 C# 语言中,使代码更简洁、可读性更强。

LINQ 支持两种查询语法:

  • 查询语法(Query Syntax):类似 SQL,结构清晰;
  • 方法语法(Method Syntax):使用 Lambda 表达式,功能强大灵活。

🧩 基本用法 & 示例

首先,确保你引入了命名空间:

using System.Linq;

📋 示例准备:定义一个 Student 类并创建集合

class Student
{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }
}// 创建学生列表
List<Student> students = new List<Student>
{new Student { Id = 1, Name = "张三", Score = 85 },new Student { Id = 2, Name = "李四", Score = 92 },new Student { Id = 3, Name = "王五", Score = 78 },new Student { Id = 4, Name = "赵六", Score = 95 },
};

🧪 一、查询语法(Query Syntax)

💡 示例 1:查询所有成绩大于 90 的学生

var highScorers = from student in studentswhere student.Score > 90select student;foreach (var s in highScorers)
{Console.WriteLine($"{s.Name} - 成绩:{s.Score}");
}

💡 示例 2:按成绩从高到低排序

var sortedStudents = from student in studentsorderby student.Score descendingselect student;foreach (var s in sortedStudents)
{Console.WriteLine($"{s.Name} - 成绩:{s.Score}");
}

💡 示例 3:投影查询(只取部分字段)

var namesAndScores = from student in studentsselect new { student.Name, student.Score };foreach (var item in namesAndScores)
{Console.WriteLine($"姓名:{item.Name},成绩:{item.Score}");
}

🧠 二、方法语法(Method Syntax)

方法语法结合 Lambda 表达式,更加灵活高效。

💡 示例 1:使用 Where 过滤数据

var highScorers = students.Where(s => s.Score > 90);foreach (var s in highScorers)
{Console.WriteLine($"{s.Name} - 成绩:{s.Score}");
}

💡 示例 2:使用 OrderByDescending 排序

var sortedStudents = students.OrderByDescending(s => s.Score);foreach (var s in sortedStudents)
{Console.WriteLine($"{s.Name} - 成绩:{s.Score}");
}

💡 示例 3:使用 Select 投影字段

var names = students.Select(s => s.Name);foreach (var name in names)
{Console.WriteLine(name);
}

💡 示例 4:使用 GroupBy 分组统计

var grouped = students.GroupBy(s => s.Score / 10);  // 按分数段分组(如 70-79、80-89)foreach (var group in grouped)
{Console.WriteLine($"分数段 {group.Key}0-{group.Key}9:");foreach (var s in group){Console.WriteLine($"  {s.Name} - {s.Score}");}
}

🧩 三、常用 LINQ 方法汇总

方法名描述
Where()筛选符合条件的元素
Select()投影转换,选择特定字段
OrderBy()升序排序
OrderByDescending()降序排序
GroupBy()按某个条件分组
First() / FirstOrDefault()获取第一个元素
Last() / LastOrDefault()获取最后一个元素
Single() / SingleOrDefault()获取唯一匹配的元素
Count()统计元素数量
Any()判断是否有符合条件的元素
All()判断是否所有元素都满足条件

💪 实战练习

✅ 练习 1:学生信息查询系统

功能要求:
  • 输入一个最低分数,显示所有高于该分数的学生;
  • 显示成绩最高的学生;
  • 显示总人数和平均分。
Console.Write("请输入最低分数:");
int minScore = int.Parse(Console.ReadLine());var filtered = students.Where(s => s.Score >= minScore).ToList();Console.WriteLine("\n符合条件的学生:");
foreach (var s in filtered)
{Console.WriteLine($"{s.Name} - {s.Score}");
}// 最高分学生
var topStudent = students.OrderByDescending(s => s.Score).First();
Console.WriteLine($"\n最高分学生:{topStudent.Name} - {topStudent.Score}");// 总人数和平均分
int count = students.Count();
double average = students.Average(s => s.Score);
Console.WriteLine($"总人数:{count},平均分:{average:F2}");

✅ 练习 2:判断是否存在及早退机制

bool hasHighScorer = students.Any(s => s.Score > 95);
Console.WriteLine(hasHighScorer ? "存在高分学生" : "没有高分学生");if (students.Any())
{var firstStudent = students.First();Console.WriteLine("第一个学生:" + firstStudent.Name);
}

📝 小结

今天你学会了:

  • LINQ 的基本概念及其优势;
  • 使用 查询语法方法语法 查询集合;
  • 掌握了常用的 LINQ 方法,如 Where, Select, OrderBy, GroupBy, First, Any, Count 等;
  • 实现了一个基于 LINQ 的学生信息查询系统。

LINQ 是 C# 中非常强大的工具,能够极大提升数据处理的效率与代码的可读性!


🧩 下一步学习方向(Day 13)

明天我们将进入一个新的主题 —— 委托(Delegate)与事件(Event),它们是 C# 实现回调机制、事件驱动编程的核心。

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

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

相关文章

ubuntu网络管理五花八门netplan 、NetworkManager、systemd、networking是什么关系

文章目录 **1. Netplan&#xff08;网络配置抽象层&#xff09;****2. NetworkManager&#xff08;动态网络管理&#xff09;****3. systemd-networkd&#xff08;轻量级网络管理&#xff09;****4. networking&#xff08;传统的 ifupdown&#xff09;****5. 它们之间的关系**…

Python爬虫实战:研究Twisted框架相关技术

1. 引言 1.1 研究背景与意义 随着互联网信息的爆炸式增长,网络爬虫作为一种高效获取和收集网络信息的技术手段,在搜索引擎优化、市场调研、数据挖掘等领域有着广泛的应用。传统的同步爬虫在面对大量 URL 请求时,由于 I/O 操作的阻塞特性,效率低下,难以满足实际应用需求。…

内网运行控制四百来个海康威视硬件物联网定员管控软件(华为平板电脑版)

内网运行控制四百来个海康威视硬件物联网定员管控软件&#xff08;华为平板电脑版&#xff09; 从去年12月至今&#xff0c;自研一套在内网中的华为平板电脑上运行&#xff0c;控制四百来个海康威视硬件的物联网定员管控软件&#xff0c;开始上线投入运行。 运行环境为华为平板…

C++ 面向对象特性详解:继承机制

&#x1f680; C 面向对象特性详解&#xff1a;继承机制全解析——代码复用与扩展的核心&#xff08;含实战陷阱&#xff09; &#x1f4c5; 更新时间&#xff1a;2025年6月19日 &#x1f3f7;️ 标签&#xff1a;C | 继承 | OOP | 面向对象 | 代码复用 | C基础 文章目录 &…

学习日记-day33-6.19

知识点&#xff1a; 1.Spring课程概述 知识点 核心内容 重点 Spring框架概述 轻量级容器框架&#xff0c;封装复杂逻辑&#xff0c;需理解IOC、AOP等核心机制 容器框架 vs 普通框架、封装带来的理解门槛 学习难点 动态代理、反射、注解、IO操作、XML解析、容器&#xf…

网络编程中操作系统连接队列管理:Linux TCP队列深度解析

在现代网络编程中&#xff0c;操作系统内核扮演着至关重要的角色&#xff0c;负责管理网络通信的复杂细节&#xff0c;从而为应用程序提供抽象接口。对于服务器应用程序而言&#xff0c;高效处理大量传入连接请求是确保性能和可靠性的核心。操作系统通过维护专门的队列机制来管…

StableDiffusion实战-手机壁纸制作 第一篇:从零基础到生成艺术品的第一步!

大家好!欢迎来到《StableDiffusion实战-手机壁纸制作》系列的第一篇! 在这一篇文章里,我们将一起探索如何用StableDiffusion(SD)这款强大的工具,快速制作出炫酷的手机壁纸。 如果你对生成艺术、AI绘图感兴趣,那你一定不能错过! 你能做什么?你将做什么! 在之前的系…

运维——14.PowerShell 与Linux 、 macOS通用的命令

PowerShell 最初是 Windows 平台的&#xff0c;但现在已经有了 PowerShell Core&#xff0c;它是跨平台的&#xff0c;支持 Linux 和 macOS。在 PowerShell Core 中有一些Linux 和 macOS通用的命令。理清楚这些有助于学习多系统命令。 在 Linux/macOS 上使用 PowerShell 完成文…

C#的泛型和匿名类型

一、C#的泛型简介 泛型是一种允许你延迟编写类或方法中的数据类型规范&#xff0c;直到你在实际使用时才替换为具体的数据类型【简单的说&#xff1a;泛型就是允许我们编写能够适用于任何数据类型的代码&#xff0c;而无需为每种特定类型重写相同的代码】(T是类型参数&#xff…

日语面试ai助手推荐:高效备考并应对日语面试难题

在准备日语面试的路上&#xff0c;你是否时常感到力不从心&#xff1f;每到模拟面试环节&#xff0c;总怕自己答非所问、用语不地道&#xff0c;或是紧张到脑子一片空白。查找资料时&#xff0c;面对海量的日语问答、面试范本和专业术语&#xff0c;常常分不清轻重缓急&#xf…

【63 Pandas+Pyecharts | 泡泡玛特微博热搜评论数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 数据信息2.3 数据去重2.4 数据去空2.5 时间处理2.6 性别处理2.7 评论内容处理 &#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 用户评论IP分…

python-最长无重复子数组

最长无重复子数组 描述代码实现 描述 给定一个长度为n的数组arr&#xff0c;返回arr的最长无重复元素子数组的长度&#xff0c;无重复指的是所有数字都不相同。 子数组是连续的&#xff0c;比如[1,3,5,7,9]的子数组有[1,3]&#xff0c;[3,5,7]等等&#xff0c;但是[1,3,7]不是…

探索 MySQL 缓存机制:提升数据库读取性能的有效策略

在现代应用中,数据库的读取性能是影响用户体验和系统响应速度的关键因素。当应用程序面临高并发读请求时,直接访问磁盘的开销会成为瓶颈。为了应对这一挑战,MySQL 引入了多种缓存机制,旨在减少磁盘 I/O,加快数据检索速度。 理解并合理利用这些缓存机制,是提升 MySQL 数据…

深度学习-164-MCP技术之开发本地MCP服务器和异步客户端

文章目录 1 概念1.1 MCP1.2 准备数据接口2 开发MCP服务器2.1 server.py2.1.1 @mcp.resource2.1.2 @mcp.tool()2.1.3 @mcp.prompt()2.2 调试模式启动mcp-server2.2.1 资源2.2.2 工具2.2.3 提示词3 开发MCP客户端3.1 调用工具client_tool3.2 获取提示client_prompt3.3 读取资源cl…

第八十一篇 大数据开发基础:队列数据结构详解与实战应用(附生活化案例)

在大数据开发的庞大体系中&#xff0c;队列&#xff08;Queue&#xff09; 作为基础数据结构之一&#xff0c;其重要性不言而喻。它不仅是构建高效数据管道的核心组件&#xff0c;更是实现异步处理、流量削峰、任务调度的关键技术。本文将深入解析队列的原理&#xff0c;结合生…

linux操作命令(最常用)

一、文件与目录操作 命令作用常用参数示例ls列出目录内容ls -l&#xff08;详细列表&#xff09; ls -a&#xff08;显示隐藏文件&#xff09;cd切换目录cd ~&#xff08;回家目录&#xff09; cd ..&#xff08;返回上级&#xff09;pwd显示当前路径-cp复制文件/目录cp -r di…

22.react和next.js、SSR与CSR的比较

SSR 和 CSR 的区别 &#x1f538; 示例说明 SSR 流程&#xff08;Next.js 支持&#xff09;&#xff1a; 1. 用户请求页面 2. 服务端生成 HTML&#xff08;含内容&#xff09; 3. 浏览器收到渲染好的页面 // SSR 页面&#xff08;默认行为&#xff09; - app/page.tsx export…

全栈加速:FrankenPHP 架构原理与实战案例

在当今云原生与微服务大行其道的时代&#xff0c;PHP 应用面临着「冷启动延迟高」「进程管理复杂」「性能瓶颈难以突破」等痛点。 FrankenPHP 正是为了解决这些问题而生&#xff1a;它将 Caddy 服务器与 PHP 运行时深度融合&#xff0c;内嵌 Let’s Encrypt 自动 HTTPS、支持 …

Android开发中的适配

目录 一:分辨率适配 1.1概念 1.2关键策略 二:多尺寸适配 2.1概念 2.2关键策略 三:多平台多版本适配 3.1Android系统版本迭代 3.2 关键策略 Android开发中的屏幕适配与多版本适配 在Android开发中,屏幕适配和多版本适配是确保应用在各种设备上都能良好运行和显示的关键。这不…

【MySQL基础篇】MySQL中的算术运算符和比较运算符

精选专栏链接 &#x1f517; MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅&#xff0c;点赞&#xff0b;关注&#xff0c;每日精进1%&#xff0c;共攀技术高峰 更多内容持续更新中&#xff01;希望能给大家带来帮助~ &…