From d7b204f70dc2cc3a71d76a29640bfadb3bf28bb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E4=BE=9D=E6=AC=A3?= <2986589005@qq.com> Date: Sun, 8 Dec 2024 21:53:37 +0800 Subject: [PATCH] 20241206 --- ...26\350\276\221\346\223\215\344\275\234.md" | 164 ++++++++++ ...36\345\210\240\346\224\271\346\237\245.md" | 285 ++++++++++++++++++ 2 files changed, 449 insertions(+) create mode 100644 "\351\231\210\344\276\235\346\254\243/20241202--\347\274\226\350\276\221\346\223\215\344\275\234.md" create mode 100644 "\351\231\210\344\276\235\346\254\243/20241206--\345\242\236\345\210\240\346\224\271\346\237\245.md" diff --git "a/\351\231\210\344\276\235\346\254\243/20241202--\347\274\226\350\276\221\346\223\215\344\275\234.md" "b/\351\231\210\344\276\235\346\254\243/20241202--\347\274\226\350\276\221\346\223\215\344\275\234.md" new file mode 100644 index 0000000..4ca60de --- /dev/null +++ "b/\351\231\210\344\276\235\346\254\243/20241202--\347\274\226\350\276\221\346\223\215\344\275\234.md" @@ -0,0 +1,164 @@ +## 笔记 +### Linq集成查询 + +1. 作用在谁的身上:答案是集合,特别是实现了IEnumerable接口的集合上,方法参数中,一般是Lambda表达式(其实就是匿名函数) + + - 查询单个元素 + - .First() 函数中可以写查找第一个条件,形如(t=>t.Id==id)。但是,如果没有第一个元素,或者没有符合条件第一个元素,则报错 + - .FirstOrDefault() 类似上面的用法,但是在没有符合条件的时候,不报错,而是返回一个null + - 查询多个元素 + - Where() 条件函数,可以查找符合一定条件的元素,返回的是一个集合 + + - 重新设计返回的数据类型 + - select() 这个函数可以帮助我们处理函数返回的真正内容 + + +## 作业 +(Controllers) BlogsController.cs +```cs +public class BlogsController : Controller +{ + [HttpPost] + public IActionResult Add(Blogs input){ + // 条件判断,检查模型的状态是否有效 + if (ModelState.IsValid) + { + //如果模型有效,这行代码会查询数据库中Blogs表,并找出最大的Id值 + //Db可能是一个数据库上下文=的实例,Blogs是数据库中的一个表或集合。Select(t=>t.Id)是一个LINQ查询,用于选择所有博客的Id字段,Max()函数则找出这些Id中的最大值。 + var maxId = Db.Blogs.Select(t=>t.Id).Max(); + // 将输入的博客对象的Id属性设置为最大Id值加1,这样可以保证新添加的博客Id是唯一的 + input.Id = maxId + 1; + // 将输入的博客对象添加到数据库上下文的Blogs集合中 + Db.Blogs.Add(input); + // 用户会被重定向到博客列表页面 + return RedirectToAction("Index"); + } + return View(input); + } + [HttpPost] + public IActionResult Edit(Blogs input){ + if(ModelState.IsValid){ + // 根据传入的id,从数据库中拿到最新的值 + var blog = Db.Blogs.FirstOrDefault(x => x.Id == input.Id); + // 判断是否有对应的对象 + // 找到后,修改对象,然后保存回数据库 + if(blog!=null){ + blog.Title = input.Title; + blog.Author = input.Author; + blog.Content = input.Content; + } + } + return RedirectToAction("Index"); + } + + public IActionResult Index() + { + return View(Db.Blogs); + // 如果没有写返回值,就会提示NullReferenceException + } + public IActionResult Add(){ + return View(); + } + public IActionResult Edit(int Id){ + // 根据传入的要编辑的id,拿到要编辑的博客文章 + var blog = Db.Blogs.FirstOrDefault(x=>x.Id==Id); + // 返回给视图 + return View(blog); + } +} +``` + + +index.html +```html +@model List; + +
+
+ @* *@ + 新增 +
+ + + + + + + + + + @foreach (var blog in @Model) + { + + + + + + + + } + + +
ID标题内容作者操作
@blog.id@blog.Title@blog.Content@blog.Author + @* + *@ + 编辑 + 删除 +
+``` + +Edit.cshtml +```html +@model Blog.Models.Blogs; + +@* 无返回:检查表单标签:确保视图中的表单元素使用了正确的标签帮助器,如asp-for和asp-action。 *@ +
+ Id:
+ 作者:
+ 标题:
+ 内容:
+ +
+``` + + +(models)blogs.cs +``` +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!; +} +``` + +(models)Db.cs +``` +namespace Blog.Models; +// 是数据库 +public static class Db{ + // 定义一个数组 + public static List Blogs {get;set;} + + // 保存 + static Db(){ + // 初始化 + Blogs = new List(); + for (int i = 0; i < 12; i++) + { + var data = new Blogs { + id=i, + Title = "黑恶黑和黑", + Content = "123332", + Author = "巴拉巴拉巴拉" + }; + // 将数据添加到数组中 + Blogs.Add(data); + } + + } +} +``` + diff --git "a/\351\231\210\344\276\235\346\254\243/20241206--\345\242\236\345\210\240\346\224\271\346\237\245.md" "b/\351\231\210\344\276\235\346\254\243/20241206--\345\242\236\345\210\240\346\224\271\346\237\245.md" new file mode 100644 index 0000000..45c558b --- /dev/null +++ "b/\351\231\210\344\276\235\346\254\243/20241206--\345\242\236\345\210\240\346\224\271\346\237\245.md" @@ -0,0 +1,285 @@ +## 笔记 +1. 控制器(Controllers) +在MVC架构中,控制器负责处理用户的输入,与模型(数据)和视图(用户界面)进行交互。对于CRUD操作,控制器通常包含以下方法: +- Create:显示创建新记录的表单。 + - Edit:显示编辑现有记录的表单。 + - Delete:处理删除记录的请求。 + - Index:显示所有记录的列表。 + +2. 视图(Views) +- 视图是MVC中的用户界面部分,负责显示数据和接收用户输入。 +- 强类型视图:使用@model指令与特定的模型类型绑定,可以在视图中直接访问模型的属性。 + + +## 作业1:Linq集成查询 +1. 查询特定元素 找出数组中等于5的元素 +``` + public IActionResult Index(string keyword){ + int[] numbers = { 1, 2, 3, 4, 5, 6 }; + var re = numbers.Where(n=> n == 5).ToList(); + return Ok(re); + } +``` +2. 查询特定范围的元素 找出数组中在2到8之间的元素。 +- var re = numbers.Where(n=> n>=2&&n<=8).ToList(); + +3. 查询并转换元素 将数组中的每个数字乘以2 +- var re = numbers.Select(n=> n * 2).ToList(); + +4. 查询特定属性的对象 找出所有名字以"王"开头的学生。 +``` + List students = new List + { + new Student { Id = 1, Name = "王有才", Age = 21 }, + new Student { Id = 2, Name = "王中王", Age = 22 }, + new Student { Id = 3, Name = "张语嫣", Age = 23 }, + new Student { Id = 4, Name = "詹宇航", Age = 35 }, + new Student { Id = 5, Name = "郑雨良", Age = 26 }, + }; + public IActionResult Index(){ + var re = students.Where(n=> n.Name.StartsWith('王')); + return Ok(re); + } + public class Student{ + public int Id {get;set;} + public int Age {get;set;} + public string Name {get;set;} = null!; + + } +``` +5. 查询并排序 找出所有年龄大于20岁的学生,并按年龄降序排列 +``` + var re = students.Where(n=> n.Age>20).OrderByDescending(s => s.Age).ToList(); + return Ok(re); +``` +6. 查询并去重 找出数组中所有不重复的数字。 +- var re = numbers.Distinct(); +7. 查询第一个元素 找出数组中第一个大于3的元素。 +- var re = numbers.FirstOrDefault(x => x > 3).ToString(); +8. 查询最后一个元素 找出数组中最后一个小于7的元素。 +- var re = numbers.Last(x => x < 7).ToString(); +9. 查询元素是否存在 检查数组中是否存在大于10的元素。 +- var re = numbers.Any(x => x > 10).ToString(); +10. 查询元素的计数 计算数组中大于5的元素数量。 +- var re = numbers.Count(x => x > 5).ToString(); +11. 查询元素的总和 计算数组中所有元素的总和。 +- var re = numbers.Sum(); +12. 查询元素的最大值 找出数组中的最大值。 +- var re = numbers.Max().ToString(); +13. 查询元素的最小值 找出数组中的最小值。 +- var re = numbers.Min().ToString(); +14. 查询元素的平均值 计算数组中所有元素的平均值。 +- var re = numbers.Average().ToString(); +15. 查询特定条件的元素 找出数组中能被3整除的元素。 +- var re = numbers.Where(x=>x % 3 == 0); +16. 查询并选择特定属性 找出所有学生的姓名和年龄。 +- var re = students.Select(x=>new{x.Age,x.Name}); +17. 查询并分组 按年龄分组学生,并计算每个年龄组的学生数量。 +- var re = students.GroupBy(x=>x.Age).Select(s=>new{Age=s.Key,Count = s.Count()}); +18. 查询并联结 联结学生和课程表,找出每个学生的所有课程。 +``` + var re = students.Join(courses,s=>s.Id,c=>c.StudentId, + (students,courses) => new{studentName = students.Name,courses=courses.CourseName} + ); +``` +19. 查询并反转 反转数组中的元素顺序 +- var re = numbers.Reverse(); +20. 查询并填充 找出数组中第一个大于2的元素,并用它填充后面的所有位置。 +``` + int f = numbers.FirstOrDefault(x=>x>2); + int index = Array.IndexOf(numbers,f); + for (int i = index+1; i < numbers.Length; i++) + { + numbers[i] = f; + } + return Ok(numbers); +``` +21. 查询并排除 从数组中排除所有小于5的元素。 +- var re = numbers.Where(x => x > 5); +22. 查询并填充默认值 如果数组中存在null值,用默认值0替换 +- var re = nullableNumbers.Select(n => n ?? 0); +23. 查询并转换类型 将字符串数组转换为整数数组。 +- var re = stringNumbers.Select(n => int.Parse(n)); +24. 查询并使用OfType过滤 从对象数组中过滤出字符串类型的元素。 +- var re = objects.OfType().ToList(); +25. 查询并使用Zip合并 合并两个数组,并创建一个包含元素对的新数组 +``` + int[] numbers1 = { 1, 2, 3 }; + int[] numbers2 = { 4, 5, 6 }; + var re = numbers1.Zip(numbers2,(x,y)=>x+" "+y); +``` +26. 查询并使用Range生成 生成一个包含1到10的整数数组。 +- var re = Enumerable.Range(1,10); +27. 查询并使用Repeat重复 重复一个元素多次,创建一个新数组。 +- var re = Enumerable.Repeat("巴拉巴拉",12); +28. 查询并使用Take限制数量 从数组中取出前5个元素。 +- var re = numbers.Take(5); +29. 查询并使用Skip跳过元素 跳过数组中的前3个元素,然后取出剩余的元素。 +- var re = numbers.Skip(3); + + +## 作业2:增删改查 +(Controllers) BlogsController.cs +```cs + public IActionResult Index(string keyword){ + if(string.IsNullOrEmpty(keyword)){ + return View(Db.blogs); + } + else{ + var info = Db.blogs.Where(x=>x.Author.Contains(keyword)||x.Content.Contains(keyword)||x.Title.Contains(keyword)).ToList(); + return View(info); + } + } + public IActionResult Delete(Blogs blog){ + var bb = Db.blogs.FirstOrDefault(x=>x.Id == blog.Id ); + return View(bb); + } + public IActionResult Add(int id){ + return View(); + } + public IActionResult Edit(int id){ + var bb = Db.blogs.FirstOrDefault(x=>x.Id == id ); + return View(bb); + } + [HttpPost] + public IActionResult Add(Blogs input){ + var maxid = Db.blogs.Select(x=>x.Id).Max(); + input.Id = maxid + 1; + Db.blogs.Add(input); + return RedirectToAction("Index"); + } + [HttpPost] + public IActionResult Delete(int id){ + if(ModelState.IsValid){ + var bb = Db.blogs.FirstOrDefault(x=>x.Id==id); + if(bb!=null){ + Db.blogs.Remove(bb); + } + } + return RedirectToAction("Index"); + } + [HttpPost] + public IActionResult Edit(Blogs input){ + if(ModelState.IsValid){ + var bb = Db.blogs.FirstOrDefault(x=>x.Id == input.Id); + if(bb!=null){ + bb.Author = input.Author; + bb.Content = input.Content; + bb.Title = input.Title; + } + } + return RedirectToAction("Index"); + } +``` + + +index.html +```html +@model List; +
+
+ + +
+
+
+ 添加 +
+ + + + + + + + + + @foreach(var blog in Model){ + + + + + + + + } + + +
ID作者标题内容操作
@blog.Id@blog.Author@blog.Title@blog.Content + 编辑 + 删除 +
+``` +Delete.cshtml +``` +@model Blog.Models.Blogs; +

确认要删除以下信息吗?????

+ + 标题:@Model.Content
+ 内容:@Model.Content
+ 作者:@Model.Title
+ +
+ + + +
+ 取消删除 +
+``` + +Edit.cshtml +```html +@model Blog.Models.Blogs; + +@* 无返回:检查表单标签:确保视图中的表单元素使用了正确的标签帮助器,如asp-for和asp-action。 *@ +
+ Id:
+ 作者:
+ 标题:
+ 内容:
+ +
+``` + + +(models)blogs.cs +``` +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!; +} +``` + +(models)Db.cs +``` +namespace Blog.Models; +// 是数据库 +public static class Db{ + // 定义一个数组 + public static List Blogs {get;set;} + + // 保存 + static Db(){ + // 初始化 + Blogs = new List(); + for (int i = 0; i < 12; i++) + { + var data = new Blogs { + id=i, + Title = "黑恶黑和黑", + Content = "123332", + Author = "巴拉巴拉巴拉" + }; + // 将数据添加到数组中 + Blogs.Add(data); + } + + } +} +``` + -- Gitee