diff --git "a/\351\273\204\351\233\252\350\212\254/20241202-Linq\351\233\206\346\210\220\346\237\245\350\257\242.md" "b/\351\273\204\351\233\252\350\212\254/20241202-Linq\351\233\206\346\210\220\346\237\245\350\257\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..1203acbfac99d4f5a044a5f79043c8b0c23e3a2f --- /dev/null +++ "b/\351\273\204\351\233\252\350\212\254/20241202-Linq\351\233\206\346\210\220\346\237\245\350\257\242.md" @@ -0,0 +1,71 @@ +## 编辑操作 +### 在控制器中 +1. 根据传入的Id,从数据库中拿到**最新**的 值 +```cs +var blog = Db.Blog.FirstOrDefault(x=>x.Id == input.Id); +``` +2. 判断是否有对应的对象,有可能找到对应的id记录 + - 找得到,修改对应的对象,然后保存回数据库,返回列表页 + ```cs + if(blog != null) + { + blog.Title = input.Title; + blog.Content = input.Content; + blog.Author = input.Author; + } + ``` + - 找不到,直接返回列表页(简单操作) + +在控制器中,两个Edit对应的代码: + +1. 对应Edit的视图 +```cs +public IActionResult Edit(int id) +{ + // 根据传入的要编辑的id,拿到要编辑的博客文章 + // 通过一定的方式,拿到那个博客 + var blog = Db.Blog.FirstOrDefault(x=>x.Id == id); + + // 返回给视图 + return View(blog); +} +``` +2. 对应Edit编辑操作页面 post请求 +```cs +[HttpPost] +[ValidateAntiForgeryToken] //判断输入的是否为空值,如果是 则提示 +public IActionResult Edit(Blog input) +{ + ... + + return View(input); +} +``` + +### 视图中 +内容与添加操作的代码相似 +## Linq集成查询 +作用在谁的身上:集合,特别是实现了IEnumerable接口的集合上,方法参数中,一般是Lambda表达式(其实就是匿名函数) + +1. 查询单个元素 + - First() 函数中可以写查找第一个的条件,形如(t => t.Id==id)。但是如果没有第一个元素,或者没有符合条件的第一个元素,则报错 + - FirstOrDefault() 类似上面的用法,但是在没有符合条件的时候,不报错,而是返回一个null + ```cs + var blog = Db.Blog.FirstOrDefault(x=>x.Id == id); + ``` + +2. 查询多个元素 + - Where() 条件函数,可以查找符合一定条件(可多个)的元素,返回的是一个集合 + ```cs + var blog = Db.Blog.Where(x=>x.Id == id && x.Author == "张三"); + ``` + +3. 重新返回的数据类型 + - Select() 这个函数可帮助我们处理函数返回的真正内容 + ```cs + // 可重命名,也可以直接写{ x.Id, x.Author } + var blog = Db.Blog.Select(x => new { Xyz = x.Id, Abc = x.Author }); + ``` +## 其他 +- null:没有框框 +- 空值:有框框,但没值(里面没有加入内容) \ No newline at end of file diff --git "a/\351\273\204\351\233\252\350\212\254/20241204-\345\210\240\351\231\244\346\237\245\346\211\276.md" "b/\351\273\204\351\233\252\350\212\254/20241204-\345\210\240\351\231\244\346\237\245\346\211\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..601aeb1e055a215df9414156d00b9d5ab072784c --- /dev/null +++ "b/\351\273\204\351\233\252\350\212\254/20241204-\345\210\240\351\231\244\346\237\245\346\211\276.md" @@ -0,0 +1,73 @@ +## 删除操作 +### 在控制器中的操作 +1. 对应删除页面的试图 + 1) 根据传入的id,尝试在对应的数据库表中查找对应的记录,找到则返回那个元素,找不到则返回null + 2) 如果blog为空,则提示要找到的那个元素不存在,反之 就显示那个元素及信息,准备删除 + ```cs + public IActionResult Delete(int id) + { + var blog = Db.Blogs.FirstOrDefault(b => b.Id == id); + if(blog != null) + { + return View(blog); + } + + return View(); + } + ``` +2. 对应删除操作 + 1) 根据传入的id,尝试在对应的数据库表中查找对应的记录 + 2) 删除操作:`Remove()` + ```cs + public IActionResult DeleteOther(int id) + { + var blog = Db.Blogs.FirstOrDefault(b => b.Id == id); + if(blog != null) + { + Db.Blogs.Remove(blog); + } + return RedirectToAction("Index"); + } + ``` + +### 在视图中 +1. 展现要删除的元素 +2. 确定删除:对应代码元素,一定要获取到对应内容 +```html +删除 +``` +3. 如果不需要删除,则返回首页 +```html +取消删除 +``` + +## 查找操作 +1. 在首页视图中添加查找框(以表单的形式),**在查找框内增加`name = Keyword`属性**,跟查找内容传输相连接 +```html +
+``` +2. 在首页的控制器中填入查询代码: +- 填写string参数,接收查找框传入的数据 +- 判断数据是否成功传入 + - 没有传入,则直接显示首页 + - 传入了就进行内容匹配,显示匹配结果 +```cs +public IActionResult Index(string keyword) +{ + if(string.IsNullOrEmpty(keyword)) + { + return View(Db.Blogs); + } + else + { + var list = Db.Blogs.Where(x => x.Title.Contains(keyword) + || x.Content.Contains(keyword) + || x.Author.Contains(keyword)) + .ToList(); + return View(list); + } +} +``` \ No newline at end of file