diff --git "a/\347\216\213\350\212\267\345\256\201/20241209-\346\225\260\346\215\256\345\272\223\351\205\215\347\275\256.md" "b/\347\216\213\350\212\267\345\256\201/20241209-\346\225\260\346\215\256\345\272\223\351\205\215\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..81099973cfdd43ab6623f91d9e4c8924747c94ca --- /dev/null +++ "b/\347\216\213\350\212\267\345\256\201/20241209-\346\225\260\346\215\256\345\272\223\351\205\215\347\275\256.md" @@ -0,0 +1,73 @@ +## 数据的持久化 +- 结绳记事 +- 甲骨文 +- 木简 +- 竹简 +- 纸 +- 账本 +- 文本文件、Excel (磁盘:HDD、SSD) +- 数据库 + - 常见数据库 + - Sqlserver + - PostgreSQL + - Mysql/MariaDb - + - 常见ORM工具(比喻为应用和数据库之间的通讯员) + - Dapper + - EntityFrameworkCore + - FreeSql + +## 应用EntityFrameworkCore的步骤 +1. 安装依赖包 +```C# +dotnet add package Microsoft.EntityFrameworkCore.SqlServer +``` +2. 定义数据库表模型(新建一个Models) +```C# +using Microsoft.EntityFrameworkCore;// 这是生成迁移文件的依赖包 +namespace Blog.Models; + +//定义数据库表模型 +public class Blogs +{ + public int Id { get; set; } + public string Title { get; set; } = null!; + public string Content { get; set; } = null!; + public string Author { get; set; } = null!; +} + +//定义数据库上下文 +public class BlogDbContext : DbContext +{ + public DbSet Blogs { get; set; } = null!; + + + // The following configures EF to create a Sqlite database file in the + // special "local" folder for your platform. + protected override void OnConfiguring(DbContextOptionsBuilder options) + //这里要先打开数据库,然后连接数据库 + //注意这里要是报转义错误是,把SK-20240829XXWR\SQLEXPRESS改成SK-20240829XXWR\\SQLEXPRESS就好 + => options.UseSqlServer($"Server=SK-20240829XXWR\\SQLEXPRESS;uid=sa;pwd=123456;TrustServerCertificate=True;"); +} + +``` + +3. 创建数据库 +```C# +dotnet tool install --global dotnet-ef //这部是安装版本,如果有就显示已安装,没有直接安装 +dotnet add package Microsoft.EntityFrameworkCore.Design //一步步来 + +``` +4. 生成迁移文件 +注意:失败的原因有两个 + - 不能有编译错误 + - 不能在运行(就是dotnet watch或者run 得暂停) +- 然后就是得有依赖包(Microsoft.EntityFrameworkCore) +```C# +dotnet ef migrations add XXX(XXX是自个命名) +``` +5. 将上一步生成的迁移文件,更新到数据库 +注意:需要保证连接字符串正确无误,包括用户名、密码等,数据库打开,并且允许远程连接 +```C# +dotnet ef database update +``` +6. 可以滚去数据库看有没有表了 \ No newline at end of file diff --git "a/\347\216\213\350\212\267\345\256\201/20241212-\345\237\272\347\241\200\351\233\206\346\210\220\346\237\245\350\257\242.md" "b/\347\216\213\350\212\267\345\256\201/20241212-\345\237\272\347\241\200\351\233\206\346\210\220\346\237\245\350\257\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..90e478ae8f3cb06b4b54b6166ef725ba1940b41e --- /dev/null +++ "b/\347\216\213\350\212\267\345\256\201/20241212-\345\237\272\347\241\200\351\233\206\346\210\220\346\237\245\350\257\242.md" @@ -0,0 +1,60 @@ +## Linq集成查询 +注意:都要首写字母大写 +1. where:条件查询 +```js +var query =nums.Where(n=> n>=2 && n<=8) +``` + +2. select:基本查询 +```js +var query =nums.Select(n=> n) +``` + +3. OrderBy:升序排序 +```js +var ages =nums.Where(s=> s.Age>20).OrderBy(s=>s.Age) +``` + +4. OrderByDescending:降序排序 +```js +var ages =nums.Where(s=> s.Age>20).OrderByDescending(s=>s.Age) +``` + +5. select:(选择特定属性或计算结果)投影 +```js +var query =nums.Select(n=> n*2) +``` + +6. Any:是否存在 (与之相反的是All) +```js +bool i =nums.Any(n=> n>10) +``` + +7. FirstOrDefault: 查找第一个元素 +```js +var first =nums.FirstOrDefault(n=> n>3) // 找出第一个大于3的 +``` + +8. Last: 查找最后一个元素 +```js +var last =nums.Where(n=> n<7>).Last() // 找出最后一个小于7的 +``` + +9. Distinct: 查重 +```js +var num =nums.Distinct +``` + +10. StartsWith :筛选字符串开头的 +```js +// 筛选字符串开头为王的 + var wangStu = students.Where(name => name.Name.StartsWith("王")); +``` + +11. Contains :筛选包含某个字符串的 +```js +// 筛选字符串包含王的 + var wangStu = students.Where(name => name.Name.Contains("王")); +``` + +### 聚合查询 \ No newline at end of file diff --git "a/\347\216\213\350\212\267\345\256\201/20241216-\351\233\206\346\210\220\346\237\245\350\257\242\350\241\245\345\205\205 .md" "b/\347\216\213\350\212\267\345\256\201/20241216-\351\233\206\346\210\220\346\237\245\350\257\242\350\241\245\345\205\205 .md" new file mode 100644 index 0000000000000000000000000000000000000000..d40983ce1d98e2b9f9ecfee2f995fe39a4716a96 --- /dev/null +++ "b/\347\216\213\350\212\267\345\256\201/20241216-\351\233\206\346\210\220\346\237\245\350\257\242\350\241\245\345\205\205 .md" @@ -0,0 +1,53 @@ +```cs +List students = new List +{ + new Student {Id=1, Name = "王有才", Age = 21 }, + new Student {Id=2, Name = "罗婷", Age = 21 }, + new Student {Id=3, Name = "王中王", Age = 22 }, + new Student {Id=4, Name = "李子柒", Age = 22 }, + new Student {Id=5, Name = "张语嫣", Age = 23 }, + new Student {Id=6, Name = "詹宇航", Age = 35 }, + new Student {Id=7, Name = "郑雨良", Age = 26 }, + new Student {Id=8, Name = "欧文", Age = 26 }, +}; +List courses=new List +{ + new Course{StudentId=1,CourseName="英语"}, + new Course{StudentId=1,CourseName="数学"}, + new Course{StudentId=2,CourseName="语文"}, + new Course{StudentId=3,CourseName="物理"}, + new Course{StudentId=4,CourseName="化学"}, + new Course{StudentId=4,CourseName="生物"}, + new Course{StudentId=4,CourseName="语文"}, +}; + +//17.查询并分组 按年龄分组学生,并计算每个年龄组的学生数量。 +var list = students.GroupBy(x=>x.Age).Select(x=>new {x.Key,Count= x.Count()}); +foreach (var item in list){ + System.Console.WriteLine($"{item.Key}岁-{item.Count}个"); +} + +//18.查询并联结 联结学生和课程表,找出每个学生的所有课程。 +var list = students.Select(stu => { + //查找当前学生ID对应的课程,只选择课程名称 + var tmpCourse = courses.Where(x => x.StudentId == stu.Id).Select(x => x.CourseName); + //将一个字符串集合,变成一个以逗号间隔的字符串 + var str = string.Join(",",tmpCourse); + //重新组合学生信息和课程字符串信息,准备返回 + var res = new {stu.Id,stu.Name,stu.Age,CourseName = str}; + return res; +}); +//过滤下没有选修课程的记录 +var newList = list.Where(x => x.CourseName.Length >0); +//打印学生信息及选修课程信息 +foreach(var item in newList){ + System.Console.WriteLine($"{item.Id}-{item.Name}-{item.Age}-{item.CourseName}"); +} +``` + +### 全文替换 +Ctrl+h + +### 登录状态 +1. Session +2. Cookies \ No newline at end of file diff --git "a/\347\216\213\350\212\267\345\256\201/20241218-\345\242\236\345\210\240\346\224\271\346\237\245.md" "b/\347\216\213\350\212\267\345\256\201/20241218-\345\242\236\345\210\240\346\224\271\346\237\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..30c9ebff88c3deb06b10d775b45ac6e6cfe7cc80 --- /dev/null +++ "b/\347\216\213\350\212\267\345\256\201/20241218-\345\242\236\345\210\240\346\224\271\346\237\245.md" @@ -0,0 +1,95 @@ +## 增删改查 + +1. 创建mvc文件 +``` +dotnet new mvc -o 'Blog' +``` + +2. 控制器创建BlogsController.cs +```c# + using Microsoft.AspNetCore.Mvc; + using Blog.Models; + + namespace Blog.Controllers; + + public IActionResult Index() + { + return View(Db.Blogs); + } + //显示添加页面 + public IActionResult Add() + { + return View(); + } + //显示删除页面 + public IActionResult Delete() + { + return View(); + } + //显示编辑页面 + public IActionResult Create() + { + return View(); + } +``` + +2. 创View与控制器同名的Blogs +3. Blogs中创视图Index + - 可以在里面使用`xx`来跳转页 + - 声明`@model List`--可以提示 +4. Index中搭建CURD 的结构 +5. 优化页面 css + + 引用css link `href="~/css/base.css"` +6. Model创Blogs.cs;让视图活起来(代表数据库表模型) + + 在里面定义字段 + ```c# + public class Blogs{ + public int Id{get;set;} + public string Title{get;set;}=null!; + public string Content{get;set;}=null!; + public string Author{get;set;}=null!; + } + ``` +7. 创数据库表Db.cs;模拟数据库所以用静态 + ```c# + public static class Db{ + Public static List Blogs{get;set;} + //构造函数 + static Db(){ + //桶 + Blog = []//Blog = new List(); + for (var i=0;i<10;i++>){ + 化//数组话 + var tmp = new Blogs{ + //应为从0开始所以要加1 + Id=i+1, + Title = $"文字{i}", + Content = $"文字{i}", + Author = $"文字{i}" + }; + //将tmp添加到List中 + Blogs.Add(tmp); + + } + } + } + ``` +8. 在控制器return View(Db.Blogs); +9. 视图中声明`@model List;` +10. 将页面变为动态 +```c# + + @foreach(var item in @Model) + { + + @item.Id + @item.Title + @item.Content + @item.Author + + 编辑 + 删除 + + + } +``` \ No newline at end of file diff --git "a/\347\216\213\350\212\267\345\256\201/20241219-\345\242\236\345\210\240\346\224\271\346\237\2452.0.md" "b/\347\216\213\350\212\267\345\256\201/20241219-\345\242\236\345\210\240\346\224\271\346\237\2452.0.md" new file mode 100644 index 0000000000000000000000000000000000000000..b27d0b1876e572cdb8b67ba2f6db325615bb158c --- /dev/null +++ "b/\347\216\213\350\212\267\345\256\201/20241219-\345\242\236\345\210\240\346\224\271\346\237\2452.0.md" @@ -0,0 +1,71 @@ +### 页面删除功能 +1. 控制台 +``` + public IActionResult Delete(int id) + { + var blog = Db.Blogs.FirstOrDefault(x => x.ID == id); + return View(blog); + } + + public IActionResult DeleteConfirm(int id) + { + var blog = Db.Blogs.FirstOrDefault(x => x.ID == id); + if (blog != null) + { + Db.Blogs.Remove(blog); + return RedirectToAction("Index"); + } + return NotFound(); + } +``` +2. 视图 +``` +@model Blog.Models.Blogs; + +

是否要删除以下信息?

+ + + + + + + + + + + + + + + + + + +
标题:@Model.Title
内容:@Model.Content
作者:@Model.Author
删除我再想想
+``` +### 页面查询功能 +1. 控制台 +``` + public IActionResult Index(string keyword) + { + keyword = string.IsNullOrEmpty(keyword) ? "" : keyword.Trim(); + if (string.IsNullOrEmpty(keyword)) + { + return View(Db.Blogs); + } + + var list = Db.Blogs.Where(x => x.Title.Contains(keyword) + || x.Content.Contains(keyword) || x.Author.Contains(keyword)).ToList(); + return View(list); + } + +``` +2. Index视图 +``` +
+ + + + +
+``` \ No newline at end of file diff --git "a/\347\216\213\350\212\267\345\256\201/\344\275\234\344\270\232/20241207-Linq.md" "b/\347\216\213\350\212\267\345\256\201/\344\275\234\344\270\232/20241207-Linq.md" index d9747f08f7639864942c0fcfa48442a5885a9d51..199c7629ce14c32d482944099ce3ec9b30ada2f7 100644 --- "a/\347\216\213\350\212\267\345\256\201/\344\275\234\344\270\232/20241207-Linq.md" +++ "b/\347\216\213\350\212\267\345\256\201/\344\275\234\344\270\232/20241207-Linq.md" @@ -17,7 +17,7 @@ ```csharp int[] numbers = { 1, 2, 3, 4, 5, 6 }; - var query1 = numbers.Where(n => n >= 2 && n <= 8); + var query = numbers.Where(n => n >= 2 && n <= 8); ``` 3. **查询并转换元素**