编辑
2025-09-28
C#
00

在C#中,LINQ(语言集成查询)是一个强大的特性,它允许开发者以声明式的方式对数据进行查询和操作。LINQ查询可以应用于各种数据源,包括集合、数据库以及XML文件。理解LINQ查询的执行方式是非常重要的,因为它影响着查询的性能和行为。在LINQ中,查询执行主要分为两种类型:延迟执行(Deferred Execution)和即时执行(Immediate Execution)。

延迟执行(Deferred Execution)

延迟执行意味着LINQ查询的执行会被推迟,直到需要枚举结果时才会执行。这意味着查询本身只是定义了一个操作的计划,并不会立即从数据源中检索数据。

示例1:延迟执行

C#
using System.Diagnostics; namespace AppLinq { internal class Program { static void Main(string[] args) { List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; IEnumerable<int> query = numbers.Where(n => n > 3); // 此时查询还没有执行 Console.WriteLine("添加一个新数"); numbers.Add(6); // 修改原始数据 // 现在枚举查询结果,查询此时才执行 foreach (var number in query) { Console.WriteLine(number); } Console.ReadKey(); } } }

image.png

编辑
2025-09-28
C#
00

LINQ (Language Integrated Query) 是C#中最强大的特性之一,它让开发者能够以一种统一、直观的方式查询各种数据源。本文将深入探讨LINQ的进阶应用技巧,通过丰富的示例带您掌握LINQ的高级用法。

查询表达式与方法语法的灵活切换

LINQ提供两种语法形式:查询表达式和方法语法。掌握这两种语法的优势,并能根据场景灵活切换是LINQ进阶的关键。

基于复杂条件的分组查询

C#
namespace AppLinq { internal class Program { public class Student { public string Name { get; set; } public int Age { get; set; } public string Major { get; set; } public int Score { get; set; } } static void Main(string[] args) { // 创建一个学生列表 var students = new List<Student>() { new Student { Name = "张三", Age = 20, Major = "计算机科学", Score = 89 }, new Student { Name = "李四", Age = 21, Major = "计算机科学", Score = 92 }, new Student { Name = "王五", Age = 19, Major = "数学", Score = 78 }, new Student { Name = "赵六", Age = 22, Major = "物理", Score = 95 }, new Student { Name = "钱七", Age = 20, Major = "数学", Score = 85 }, new Student { Name = "孙八", Age = 21, Major = "物理", Score = 82 } }; // 查询表达式:按专业分组,计算每个专业的平均分 var queryExpression = from student in students group student by student.Major into majorGroup select new { Major = majorGroup.Key, AverageScore = majorGroup.Average(s => s.Score), StudentCount = majorGroup.Count() }; // 方法语法:实现相同功能 var methodSyntax = students .GroupBy(s => s.Major) .Select(g => new { Major = g.Key, AverageScore = g.Average(s => s.Score), StudentCount = g.Count() }); // 混合使用:先用查询表达式过滤,再用方法语法进行复杂处理 var hybridQuery = (from student in students where student.Score >= 80 select student) .OrderByDescending(s => s.Score) .Take(3); // 输出结果 foreach (var result in queryExpression) { Console.WriteLine($"专业: {result.Major}, 平均分: {result.AverageScore:F2}, 学生数: {result.StudentCount}"); } foreach (var result in methodSyntax) { Console.WriteLine($"专业: {result.Major}, 平均分: {result.AverageScore:F2}, 学生数: {result.StudentCount}"); } foreach (var result in hybridQuery) { Console.WriteLine($"姓名:{result.Name} {result.Major}"); } Console.ReadKey(); } } }

image.png

编辑
2025-09-28
C#
00

LINQ重中之重,LINQ(Language-Integrated Query)是C#中的一组技术,用于查询内存中的数据。LINQ to Objects是指使用LINQ查询.NET中的对象集合(如数组、列表等)。

第一部分:LINQ基础

LINQ是一种查询语法,它允许开发者以声明性的方式查询数据,无论这些数据是来自数据库、XML文档还是内存中的集合。

LINQ to Objects

LINQ to Objects指的是对内存中的对象集合(如数组、列表)进行查询。它允许我们使用强类型的方式来查询集合中的数据。

查询表达式

查询表达式是LINQ查询的一种语法,它看起来很像SQL语句。查询表达式通常由fromwhereselectorderby等子句组成。

延迟执行

LINQ查询具有延迟执行的特性,即查询表达式定义了一个查询计划,但直到你迭代访问结果时,查询才真正执行。

编辑
2025-09-28
NodeJs
00

Node.js 提供了许多内置的方法来创建和删除目录。在本文中,我们将详细讲解如何在Node.js中操作目录,并提供一些完整的示例代码。

引入 fs 模块

所有的文件和目录操作都需要使用 fs 模块,这是 Node.js 提供的文件系统模块。首先,引入 fs 模块:

JavaScript
const fs = require('fs'); const path = require('path');

注意: 你可能也会使用 path 模块来进行路径操作,如拼接路径、解析路径等。

编辑
2025-09-28
NodeJs
00

在Node.js中,处理文件是一个常见的任务,Node.js提供了一些内置的模块来帮助我们轻松地完成文件读写操作。本文将详细介绍如何在Node.js中进行文件读写,并提供丰富的示例代码。

引入 fs 模块

fs 模块是Node.js的核心模块之一,用于文件系统操作。在开始文件操作之前,我们需要先引入这个模块:

JavaScript
const fs = require('fs');

同步读写文件

同步读取文件

fs.readFileSync 方法用于同步读取文件。它是一个阻塞操作,读取文件的内容并返回其内容。

参数说明:

  • path: 要读取的文件的路径。
  • options (可选): 用于指定编码或标志。默认情况下,它是 null
JavaScript
const fs = require('fs'); try { const data = fs.readFileSync('example.txt', 'utf8'); console.log(data); } catch (err) { console.error(err); }