diff --git "a/\351\231\210\346\200\235\347\235\277/20241202-(\345\210\240\351\231\244,\346\237\245\346\211\276).md" "b/\351\231\210\346\200\235\347\235\277/20241202-(\345\210\240\351\231\244,\346\237\245\346\211\276).md" new file mode 100644 index 0000000000000000000000000000000000000000..13031e061c6fa31836bac45dbf4e350a8e5e5abc --- /dev/null +++ "b/\351\231\210\346\200\235\347\235\277/20241202-(\345\210\240\351\231\244,\346\237\245\346\211\276).md" @@ -0,0 +1,185 @@ +## 删除操作 + +### 控制器中的处理逻辑 + +#### 1. 渲染删除页面 +- **操作**:根据传入的 `id` 在数据库表中查找对应记录。 +- **逻辑**: + - 如果找到记录,则返回元素供用户确认删除。 + - 如果找不到记录,则提示用户目标不存在。 +- **示例代码**: + ```cs + public IActionResult Delete(int id) + { + var blog = Db.Blogs.FirstOrDefault(b => b.Id == id); + if (blog != null) + { + return View(blog); + } + return View(); + } + ``` + +#### 2. 执行删除操作 +- **操作**:再次通过 `id` 查找记录,找到后执行删除。 +- **示例代码**: + ```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. **添加搜索框**:在主页视图中加入表单,连接到控制器的 `Index` 方法。 + ```html +
+ ``` + +### 控制器逻辑 + +1. **处理搜索请求**: + - 判断是否有关键字输入。 + - 如果没有关键字,则显示所有内容。 + - 如果有关键字,则匹配相关数据并返回结果。 + ```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); + } + } + ``` + +--- + +## LINQ 查询与 Lambda 表达式 + +### 基础操作示例 + +1. **查询特定元素**:获取数组中等于 5 的值。 + ```cs + var result = numbers.Where(x => x == 5); + ``` + +2. **筛选范围元素**:找出 2 到 8 之间的数字。 + ```cs + var result = numbers.Where(x => x > 2 && x < 8); + ``` + +3. **数据转换**:将数组中的每个数字乘以 2。 + ```cs + var result = numbers.Select(x => x * 2); + ``` + +4. **筛选特定属性**:获取名字以“王”开头的学生。 + ```cs + var result = students.Where(x => x.Name.StartsWith("王")); + ``` + +5. **排序**:找出年龄大于 20 的学生并按年龄降序排列。 + ```cs + var result = students.Where(x => x.Age > 20).OrderByDescending(x => x.Age); + ``` + +6. **去重**:获取数组中所有不重复的数字。 + ```cs + var result = numbers.Distinct(); + ``` + +--- + +### 进阶操作示例 + +1. **分组统计**:按年龄分组学生并计算每组人数。 + ```cs + var result = students.GroupBy(x => x.Age) + .Select(g => new { Age = g.Key, Count = g.Count() }); + ``` + +2. **关联查询**:联结学生和课程,返回学生的所有课程。 + ```cs + var result = students.Join(courses, + s => s.Id, + c => c.StudentId, + (student, course) => new { student.Name, course.CourseName }); + ``` + +3. **翻转顺序**:将数组反转。 + ```cs + var result = numbers.Reverse(); + ``` + +4. **限制元素数量**:获取前 5 个数字。 + ```cs + var result = numbers.Take(5); + ``` + +5. **跳过元素**:跳过前 3 个数字,获取剩余的内容。 + ```cs + var result = numbers.Skip(3); + ``` + +--- + +### 高级操作示例 + +1. **合并数组**:使用 `Zip` 合并两个数组,生成新数组。 + ```cs + var result = numbers1.Zip(numbers2, (x, y) => $"{x} {y}"); + ``` + +2. **生成序列**:创建包含从 1 到 10 的数组。 + ```cs + var result = Enumerable.Range(1, 10); + ``` + +3. **重复元素**:将一个元素重复多次,生成新数组。 + ```cs + var result = Enumerable.Repeat("元素", 10); + ``` + +4. **过滤特定类型**:从对象数组中过滤出字符串类型的值。 + ```cs + var result = objects.OfType标题: | +@Model.Title | +
内容: | +@Model.Content | +
作者: | +@Model.Author | +
+ 确认删除 + | ++ 取消 + | +