diff --git "a/\347\277\201\344\277\241\346\240\213/20241209.md" "b/\347\277\201\344\277\241\346\240\213/20241209.md" new file mode 100644 index 0000000000000000000000000000000000000000..d62319a511712abb3a5bb928f0b1990767f0a22b --- /dev/null +++ "b/\347\277\201\344\277\241\346\240\213/20241209.md" @@ -0,0 +1,76 @@ +## 持久化及持久化方案 +- 结绳记事 +- 甲骨文 +- 木简 +- 竹简 +- 碑 +- 纸 +- 账本 +- 电子的文件,如文本文件、Excel、Word +- 数据库 + - 市面上常用数据库 + - Sqlserver 微软的产品 + - PostgreSQl 开源产品 社区驱动 + - MySQL/MariaDb 开源产品 公司驱动 + - Oracle 商业产品 + - Sysbase 商业产品 + - DB2 商业产品 + - 达梦 + - 人大金仓 + - Redis 非关系型数据库 开源 + - Memarchem 非关系型数据库 开源 + - MongoDb 非关系型数据库 开源 + - 常用的ORM工具(应用和数据库打交道的工具) + - Dapper 开源产品 特点是速度快,但代码写起来很麻烦 + - EntityFrameworkCore 微软家产品 特点是代码写起来很清楚并且快,但执行速度较慢(相对于Dapper + - 数据库优先 曾经很流行,现在不怎么流行 + - 代码优先 现在比较主流的做法 + - 定义数据库模型 + - 生成迁移文件(执行一个命令) + - 将迁移文件同步到数据库,完成 + - FreeSql 开源 + - Hibernet 开源 + +## Models数据库类型 +- 模型中的每一个类型,都和数据库表中的数据库一一对应 +- 一条数据表中的记录,在程序或应用中表现为一个对象 +- 一系列记录,则在程序和应用中表现为一个集合 + + +## 连接数据库(代码优先) + +1. 定义数据库模型 +```cs +using Microsoft.EntityFrameworkCore; +namespace Apple.Models; + +public class BlogDbContext : DbContext +{ + public BlogDbContext(DbContextOptions options) : base(options) + { + } + public DbSet Blogs { get; set; } = null!; +} +``` + +2. 在Program.cs文件中添加连接数据库语句,以及执行操作代码 +```cs +var connectionString = $"Server=.;Database=MdBlog;uid=sa;pwd=123456;TrustServerCertificate=true"; + +builder.Services.AddDbContext(opt => +{ + opt.UseSqlServer(connectionString); +}); +builder.Services.AddScoped(); +``` + +3. 终端相关运行步骤 + - 安装工具“dotnet-ef”:`dotnet tool install --global dotnet-ef` + + - 安装包 Microsoft.EntityFrameworkCore.Design + + `dotnet add package Microsoft.EntityFrameworkCore.Design` + + - 添加迁移数据:`dotnet ef migrations add InitCreate` + + - 将迁移文件更新到数据库:`dotnet ef database update` \ No newline at end of file diff --git "a/\347\277\201\344\277\241\346\240\213/20241211.md" "b/\347\277\201\344\277\241\346\240\213/20241211.md" new file mode 100644 index 0000000000000000000000000000000000000000..17ea1d1bd36ebc89ab403d0ff6531b0e2261afcd --- /dev/null +++ "b/\347\277\201\344\277\241\346\240\213/20241211.md" @@ -0,0 +1,67 @@ +# MVC中LINQ查询 + +## 1. LINQ简介 + +LINQ(Language Integrated Query,语言集成查询)是微软为.NET Framework提供的一种查询技术,允许开发者在C#等语言中直接使用类似SQL的语法进行数据查询和操作。LINQ支持多种数据源,包括集合、数据库、XML等,并提供统一的查询语法。 + +## 2. LINQ查询的基本语法 + +### 2.1 查询表达式语法 + +LINQ查询表达式语法类似于SQL,常见结构如下: + +```csharp +var query = from item in dataSource + where condition + orderby item.Property ascending/descending + select item; +``` + +- **from**: 指定数据源和范围变量。 +- **where**: 过滤数据,返回满足条件的元素。 +- **orderby**: 对结果进行排序,可以指定升序(ascending)或降序(descending)。 +- **select**: 定义查询结果的形状或类型。 + +### 2.2 方法语法 + +方法语法使用扩展方法和Lambda表达式,常见方法包括: + +- **Where**: 过滤数据。 +- **Select**: 投影数据。 +- **OrderBy**: 排序数据。 +- **GroupBy**: 分组数据。 + +示例: + +```csharp +var query = dataSource.Where(item => item.Property > 10) + .OrderBy(item => item.Property) + .Select(item => item.Property); +``` + +## 3. LINQ查询操作符 + +### 3.1 常用操作符 + +- **Where**: 用于筛选数据。 +- **Select**: 用于选择和转换数据。 +- **OrderBy**: 用于排序数据。 +- **GroupBy**: 用于分组数据。 +- **Join**: 用于连接多个数据源。 + +### 3.2 聚合操作符 + +- **Sum**: 计算总和。 +- **Average**: 计算平均值。 +- **Count**: 计算元素数量。 +- **Max** 和 **Min**: 查找最大值和最小值。 + +## 4. LINQ查询的执行 + +### 4.1 延迟执行 + +LINQ查询默认采用延迟执行(Lazy Evaluation),即查询在定义时不立即执行,而是在迭代结果时才执行。这有助于提高性能,尤其是在处理大数据集时。 + +### 4.2 立即执行 + +可以使用诸如 `ToList()`, `ToArray()`, `Count()` 等方法来强制立即执行查询。这些方法会遍历查询结果并生成一个新的集合。 \ No newline at end of file diff --git "a/\347\277\201\344\277\241\346\240\213/20241213.md" "b/\347\277\201\344\277\241\346\240\213/20241213.md" new file mode 100644 index 0000000000000000000000000000000000000000..1b6237db418d9b8c23b3b90eb16eac4586c77ae2 --- /dev/null +++ "b/\347\277\201\344\277\241\346\240\213/20241213.md" @@ -0,0 +1,57 @@ +## 标准查询操作符及例子 +这些是LINQ中最常用的扩展方法,它们被定义在System.Linq命名空间中。 + +1. Where - 筛选 + + List numbers = new List { 1, 2, 3, 4, 5 }; + var evenNumbers = numbers.Where(n => n % 2 == 0); // 筛选出偶数 + +2. Select - 投影 + + var squares = numbers.Select(n => n * n); // 将每个数字映射为其平方 + +3. SelectMany - 扁平化 + + List> a = new List> { + new List { 1, 2 }, + new List { 3, 4 } + }; + var b = a.SelectMany(list => list); // 将多个列表扁平化为一个列表 + +4. OrderBy/OrderByDescending - 排序 + + var c = numbers.OrderBy(n => n); // 升序排序 + var d= numbers.OrderByDescending(n => n); // 降序排序 + +5. GroupBy - 分组 + + var e= numbers.GroupBy(n => n % 2 == 0); // 根据数字是否为偶数进行分组 + +6. Aggregate - 聚合 + + int sum = numbers.Aggregate((total, n) => total + n); // 计算总和 + +7. Join - 联接 + + List f= new List { "apple", "banana", "cherry" }; + var g = words.Select(word => word.ToUpper()); // 将单词转换为大写 + var h = string.Join(", ", g); // 用逗号连接单词 + +辅助方法 +1. Count - 计数 + + int count = numbers.Count(); // 计算集合中的元素数量 + +2. Any/All - 存在/全部 + + bool hasEven = numbers.Any(n => n % 2 == 0); // 检查是否有偶数 + bool allPositive = numbers.All(n => n > 0); // 检查所有数字是否都大于0 + +3. Contains - 包含 + + bool containsThree = numbers.Contains(3); // 检查集合中是否包含数字3 + +4. DefaultIfEmpty - 默认值 + + IEnumerable emptyList = Enumerable.Empty(); + var defaultList = emptyList.DefaultIfEmpty(-1); // 如果集合为空,则返回-1 \ No newline at end of file