From b1e4d3ed80941c52bd5ae9103ad39c9a43e14574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BE=AF=E5=87=A4=E9=98=B3?= <14091016+houfengyang@user.noreply.gitee.com> Date: Sun, 15 Dec 2024 19:31:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0=E5=92=8C=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\346\225\260\346\215\256\345\272\223).md" | 76 +++++++++++++++++ ...20241211(Linq\346\237\245\350\257\242).md" | 84 +++++++++++++++++++ ...0241213(Linq\346\237\245\350\257\2422).md" | 0 3 files changed, 160 insertions(+) create mode 100644 "\344\276\257\345\207\244\351\230\263/20241209(\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223).md" create mode 100644 "\344\276\257\345\207\244\351\230\263/20241211(Linq\346\237\245\350\257\242).md" create mode 100644 "\344\276\257\345\207\244\351\230\263/20241213(Linq\346\237\245\350\257\2422).md" diff --git "a/\344\276\257\345\207\244\351\230\263/20241209(\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223).md" "b/\344\276\257\345\207\244\351\230\263/20241209(\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223).md" new file mode 100644 index 0000000..d62319a --- /dev/null +++ "b/\344\276\257\345\207\244\351\230\263/20241209(\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223).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/\344\276\257\345\207\244\351\230\263/20241211(Linq\346\237\245\350\257\242).md" "b/\344\276\257\345\207\244\351\230\263/20241211(Linq\346\237\245\350\257\242).md" new file mode 100644 index 0000000..29d8df2 --- /dev/null +++ "b/\344\276\257\345\207\244\351\230\263/20241211(Linq\346\237\245\350\257\242).md" @@ -0,0 +1,84 @@ +# LINQ查询的基本语法 +## 语法 +- **Where**: 过滤数据。 +- **Select**: 投影数据。 +- **OrderBy**: 排序数据。 +- **GroupBy**: 分组数据。 +## 常用操作符 +- **Where**: 用于筛选数据。 +- **Select**: 用于选择和转换数据。 +- **OrderBy**: 用于排序数据。 +- **GroupBy**: 用于分组数据。 +- **Join**: 用于连接多个数据源。 + +1. StartsWith :用来查询第一个字符 +` +var nu = students.Where(x => x.Name.StartsWith("王")); +` +2. OrderByDescending:倒序排序 +` +var nu=students.Where(x=> x.Age>20 ).OrderByDescending(x=> x.Age); +` +3. Distinct:在集合中来移除重复项 + ` + public dynamic T6() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu=numbers.Distinct(); + return nu; + } +` +4. irstOrDefault 方法用于返回序列中的第一个元素,如果序列为空,则返回默认值 +` + public dynamic T7() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu=numbers.FirstOrDefault(x=>x>3).ToString(); + return nu; + } +` + ### 聚合操作符 + +- **Sum**: 计算总和。 +` + public dynamic T11() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu=numbers.Sum(); + return nu.ToString(); + } +` + +- **Average**: 计算平均值。 +` +public dynamic T14() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu =numbers.Average(); + return nu.ToString(); + } +` +- **Count**: 计算元素数量。 +` +public dynamic T10() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu=numbers.Count(x=>x>5); + return nu; + } +` +- **Max** 和 **Min**: 查找最大值和最小值。 +` +public dynamic T12() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu=numbers.Max(); + return nu.ToString(); + } + public dynamic T13() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu=numbers.Min(); + return nu.ToString(); + } +` \ No newline at end of file diff --git "a/\344\276\257\345\207\244\351\230\263/20241213(Linq\346\237\245\350\257\2422).md" "b/\344\276\257\345\207\244\351\230\263/20241213(Linq\346\237\245\350\257\2422).md" new file mode 100644 index 0000000..e69de29 -- Gitee From 53c89bbd10e2ce7930d89ba4cfd7748541f113b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BE=AF=E5=87=A4=E9=98=B3?= <14091016+houfengyang@user.noreply.gitee.com> Date: Sun, 15 Dec 2024 19:33:41 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0=E5=92=8C=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0241213(Linq\346\237\245\350\257\2422).md" | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git "a/\344\276\257\345\207\244\351\230\263/20241213(Linq\346\237\245\350\257\2422).md" "b/\344\276\257\345\207\244\351\230\263/20241213(Linq\346\237\245\350\257\2422).md" index e69de29..260252b 100644 --- "a/\344\276\257\345\207\244\351\230\263/20241213(Linq\346\237\245\350\257\2422).md" +++ "b/\344\276\257\345\207\244\351\230\263/20241213(Linq\346\237\245\350\257\2422).md" @@ -0,0 +1,88 @@ +# LINQ查询的基本语法 +1. Range: 它可以生成一个包含指定范围内连续整数的序列 +` + public dynamic T26() + { + int[] numbers = Enumerable.Range(1, 10).ToArray(); + return numbers; + } +` +2. Repeat: 它用于重复一个指定的元素多次以生成一个新的序列 +` + public dynamic T27() + { + // 要重复的元素 + int element = 34; + // 重复的次数 + int count = 10; + int[] re= Enumerable.Repeat(element, count).ToArray(); + return re; + } +` +3. Take:它用于从序列中取出指定数量的元素 +` + public dynamic T28() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu = numbers.Take(5); + return nu; + } +` +4. Skip:它用于跳过序列中指定数量的元素,然后返回剩余的元素 +` + public dynamic T29() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu = numbers.Skip(3); + return nu; + } +` +5. GroupBy: 允许你根据一个或多个条件将序列中的元素分组 +` +var nu = students.GroupBy(s => s.Age).Select(s => new { s.Key, Count = s.Count() }); + +` +6. Reverse方法是用于反转数组中元素顺序的函数。它可以直接修改原数组, +` + 也可以接受一个数组和一个范围作为参数,仅反转该范围内的元素 + public dynamic T19() + { + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var nu=numbers.Reverse(); + return nu; + } +` +7. OfType:从一个包含多种类型的集合中需要筛选出特定类型的元素时。 +` + public dynamic T24() + { + object[] objects = { "String", 123, "Another String", 456 }; + var result = objects.OfType().ToList(); + return result; + } +` +8. Zip(将两个集合中的对应元素配对) +` +public dynamic T25() + { + int[] numbers1 = { 1, 2, 3 }; + int[] numbers2 = { 4, 5, 6 }; + var nu = numbers1.Zip(numbers2, (first, second) => (first, second)).ToArray(); + return nu; + } +` +### First / FirstOrDefault ++ First():返回集合中的第一个元素。 ++ FirstOrDefault():返回集合中的第一个元素,如果集合为空,则返回默认值。 + +### Last / LastOrDefault ++ Last():返回集合中的最后一个元素。 ++ LastOrDefault():返回集合中的最后一个元素,如果集合为空,则返回默认值。 + +### Single / SingleOrDefault ++ Single():返回集合中的唯一元素,如果集合不包含恰好一个元素,则抛出异常。 ++ SingleOrDefault():返回集合中的唯一元素,如果集合为空或包含多个元素,则返回默认值。 + +### lementAt / ElementAtOrDefault ++ ElementAt():返回集合中指定索引位置的元素。 ++ ElementAtOrDefault():返回集合中指定索引位置的元素,如果索引超出范围,则返回默认值。 \ No newline at end of file -- Gitee