跟著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
英文地址,請注明出處:http://en.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;希望能給大家帶來幫助~ &…