diff --git "a/\351\230\231\346\263\263\347\217\215/20241202(\345\210\240\351\231\244&\346\237\245\350\257\242\346\223\215\344\275\234).md" "b/\351\230\231\346\263\263\347\217\215/20241202(\345\210\240\351\231\244&\346\237\245\350\257\242\346\223\215\344\275\234).md"
new file mode 100644
index 0000000000000000000000000000000000000000..cb920959331c2ee406a1923afc2361aadf7b35e3
--- /dev/null
+++ "b/\351\230\231\346\263\263\347\217\215/20241202(\345\210\240\351\231\244&\346\237\245\350\257\242\346\223\215\344\275\234).md"
@@ -0,0 +1,210 @@
+## 删除操作
+### 控制器中的处理逻辑
+#### 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);
+ }
+ }
+ ```
+
+## 课后作业
+
+### 作业一
+```html
+@model List;
+
+
+
+
+
+
+
+
+ | 序号 |
+ 标题 |
+ 内容 |
+ 作者 |
+ 操作 |
+
+
+
+ @foreach (var item in Model)
+ {
+
+ | @item.Id |
+ @item.Title |
+ @item.Content |
+ @item.Author |
+
+ 编辑
+ 删除
+ |
+
+ }
+
+
+
+```
+
+```cs
+// 控制器中的 Index 动作方法,返回博客列表视图
+public IActionResult Index()
+{
+ return View(Db.Blogs); // 将数据库中的博客列表传递给视图
+}
+```
+### 作业二
+```html
+@model Apple.Models.Blogs; // 绑定视图模型为博客模型
+
+
+```
+
+```csharp
+[HttpPost]
+public IActionResult Create(Blogs input)
+{
+ var maxId = Db.Blogs.Select(t => t.Id).Max();
+ input.Id = maxId + 1;
+
+ Db.Blogs.Add(input);
+ Db.SaveChanges(); // 保存更改
+ return RedirectToAction("Index"); // 重定向到博客列表页面
+}
+```
+
+
+### 作业三
+要完成修改功能,你需要两个主要部分:视图(View)和控制器(Controller)动作方法。以下是如何实现编辑博客文章的修改功能的示例:
+
+### 视图(Edit.cshtml)
+
+```html
+@model Apple.Models.Blogs
+
+
+```
+
+在这个视图中,我们使用了 `asp-for` 标签帮助器来绑定模型的属性。注意 `Id` 字段是一个隐藏字段,这样当表单提交时,博客的 ID 也会被发送到服务器。
+
+### 控制器(BlogController.cs)
+
+```csharp
+public IActionResult Edit(int id)
+{
+ var blog = Db.Blogs.FirstOrDefault(b => b.Id == id);
+ if (blog == null)
+ {
+ return NotFound(); // 如果找不到博客,返回 404 错误
+ }
+ return View(blog); // 将博客模型传递给视图
+}
+
+
+[HttpPost]
+[ValidateAntiForgeryToken]
+public IActionResult Edit(int id, Blogs input)
+{
+ if (id != input.Id)
+ {
+ return NotFound(); // 如果 ID 不匹配,返回 404 错误
+ }
+
+ if (ModelState.IsValid)
+ {
+ Db.Blogs.Update(input); // 更新数据库中的博客
+ Db.SaveChanges(); // 保存更改
+ return RedirectToAction("Index"); // 重定向到博客列表页面
+ }
+
+ return View(input); // 如果模型无效,重新显示编辑表单
+}
+```
+
diff --git "a/\351\230\231\346\263\263\347\217\215/20241204(\347\274\226\350\276\221&\351\233\206\346\210\220\346\237\245\350\257\242).md" "b/\351\230\231\346\263\263\347\217\215/20241204(\347\274\226\350\276\221&\351\233\206\346\210\220\346\237\245\350\257\242).md"
new file mode 100644
index 0000000000000000000000000000000000000000..f11f1ee5c50a48ab9eeea780cff1088c2d0b4873
--- /dev/null
+++ "b/\351\230\231\346\263\263\347\217\215/20241204(\347\274\226\350\276\221&\351\233\206\346\210\220\346\237\245\350\257\242).md"
@@ -0,0 +1,389 @@
+# 实现编辑功能
+### 控制器中的实现
+#### 1. 获取要编辑的记录
+通过传入的 `Id` 从数据库中查询对应的记录,如果找到则返回用于编辑;否则直接返回列表页。
+
+```csharp
+public IActionResult Edit(int id)
+{
+ // 从数据库中查找目标记录
+ var blog = Db.Blogs.FirstOrDefault(b => b.Id == id);
+ // 将记录传递给视图进行编辑
+ return View(blog);
+}
+```
+
+#### 2. 提交编辑后的数据
+通过 POST 请求接收用户修改后的内容,并将其保存到数据库中。
+- 如果输入有效且记录存在,则更新数据并保存。
+- 如果未找到记录,则返回到列表页。
+
+```csharp
+[HttpPost]
+[ValidateAntiForgeryToken]
+public IActionResult Edit(Blog input)
+{
+ var blog = Db.Blogs.FirstOrDefault(b => b.Id == input.Id);
+ if (blog != null)
+ {
+ // 更新记录的字段
+ blog.Title = input.Title;
+ blog.Content = input.Content;
+ blog.Author = input.Author;
+ }
+
+ // 保存后跳转到首页
+ return RedirectToAction("Index");
+}
+```
+
+
+
+### 视图中的实现
+>编辑界面使用表单提交修改内容,内容结构与新增页面类似:
+```html
+@model Blog.Models.Blog
+
+
+```
+
+
+
+# 集成 LINQ 查询
+>LINQ 是一种用于操作集合的强大工具,通常用于实现高效的查询和数据处理。
+
+### 查询单个元素
+- **获取首个匹配项**:`First()` 会返回符合条件的第一个元素,如果不存在则抛出异常。
+- **安全获取**:`FirstOrDefault()` 如果未找到匹配项,则返回 `null`。
+
+```csharp
+var blog = Db.Blogs.FirstOrDefault(b => b.Id == id);
+```
+
+### 查询多个元素
+- **筛选条件**:`Where()` 方法可根据条件返回多个匹配项。
+
+```csharp
+var blogs = Db.Blogs.Where(b => b.Author == "张三" && b.Id > 10);
+```
+
+### 返回指定字段
+- **映射结果**:使用 `Select()` 返回处理后的字段集合。
+
+```csharp
+var result = Db.Blogs.Select(b => new { BlogId = b.Id, Writer = b.Author });
+```
+
+
+
+
+# 综合功能实现示例
+### 删除视图 (删除功能)
+```html
+@model Blog.Models.Blog
+
+
+
+ | 标题: |
+ @Model.Title |
+
+
+ | 内容: |
+ @Model.Content |
+
+
+ | 作者: |
+ @Model.Author |
+
+
+ |
+ 确认删除
+ |
+
+ 取消
+ |
+
+
+```
+
+
+
+### 控制器实现
+```csharp
+public IActionResult ConfirmDelete(int id)
+{
+ var blog = Db.Blogs.FirstOrDefault(b => b.Id == id);
+ if (blog != null)
+ {
+ Db.Blogs.Remove(blog);
+ }
+ return RedirectToAction("Index");
+}
+```
+
+---
+
+
+### 新增视图 (新增功能)
+```html
+@model Blog.Models.Blog
+
+
+```
+
+
+### 控制器实现
+```csharp
+public IActionResult Create()
+{
+ return View();
+}
+
+[HttpPost]
+public IActionResult Create(Blog input)
+{
+ if (ModelState.IsValid)
+ {
+ input.Id = Db.Blogs.Max(b => b.Id) + 1; // 自动生成新 ID
+ Db.Blogs.Add(input);
+ return RedirectToAction("Index");
+ }
+ return View(input);
+}
+```
+
+---
+
+
+### 搜索视图 (搜索功能)
+```html
+
+
+
+```
+
+### 控制器实现
+```csharp
+public IActionResult Index(string keyword)
+{
+ if (string.IsNullOrWhiteSpace(keyword))
+ {
+ return View(Db.Blogs);
+ }
+ else
+ {
+ var results = Db.Blogs.Where(b =>
+ b.Title.Contains(keyword) ||
+ b.Content.Contains(keyword) ||
+ b.Author.Contains(keyword)).ToList();
+ return View(results);
+ }
+}
+
+
+# 课后作业
+## 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();
+```
+
+7. **查询第一个元素**: 找出数组中第一个大于3的元素。
+```cs
+ public IActionResult Index7(){
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ var result7=numbers.FirstOrDefault(x=>x>3).ToString();
+ return Ok(result7);
+ }
+```
+
+8. **查询最后一个元素**: 找出数组中最后一个小于7的元素。
+```cs
+ public IActionResult Index8(){
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3};
+ var result8=numbers.LastOrDefault(x=>x<7).ToString();
+ return Ok(result8);
+ }
+```
+
+9. **查询元素是否存在** 检查数组中是否存在大于10的元素。
+```cs
+ public IActionResult Index9(){
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ bool result9=numbers.Any(x=>x>10);
+ return Ok(result9);
+ }
+```
+
+10. **查询元素的计数** 计算数组中大于5的元素数量。
+```cs
+ public IActionResult Index10(){
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ var result10=numbers.Count(x=>x>5).ToString();
+ return Ok(result10);
+ }
+```
+
+11. **查询元素的总和** 计算数组中所有元素的总和。
+```cs
+ public IActionResult Index11(){
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ var result11=numbers.Sum();
+ return Ok(result11);
+ }
+```
+
+12. **查询元素的最大值** 找出数组中的最大值。
+```cs
+ public IActionResult Index12(){
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ var result12=numbers.Max().ToString();
+ return Ok(result12);
+ }
+```
+
+13. **查询元素的最小值** 找出数组中的最小值。
+```cs
+ public IActionResult Index13(){
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ var result13=numbers.Min().ToString();
+ return Ok(result13);
+ }
+```
+
+14. **查询元素的平均值** 计算数组中所有元素的平均值。
+```cs
+ public IActionResult Index14(){
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ var result14=numbers.Average().ToString();
+ return Ok(result14);
+ }
+```
+
+15. **查询特定条件的元素** 找出数组中能被3整除的元素。
+```cs
+ public IActionResult Index15(){
+ int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 };
+ var result15=numbers.Where(x=>x%3==0).ToList();
+ return Ok(result15);
+ }
+```
+
+
+
+### 中阶操作示例
+16. **分组统计**:按年龄分组学生并计算每组人数。
+```cs
+var result = students.GroupBy(x => x.Age)
+ .Select(g => new { Age = g.Key, Count = g.Count() });
+```
+
+17. **关联查询**:联结学生和课程,返回学生的所有课程。
+```cs
+var result = students.Join(courses,
+ s => s.Id,
+ c => c.StudentId,
+ (student, course) => new { student.Name, course.CourseName });
+```
+
+18. **翻转顺序**:将数组反转。
+```cs
+var result = numbers.Reverse();
+```
+
+19. **限制元素数量**:获取前 5 个数字。
+```cs
+var result = numbers.Take(5);
+```
+
+20. **跳过元素**:跳过前 3 个数字,获取剩余的内容。
+```cs
+var result = numbers.Skip(3);
+```
+
+21. **查询并排除**:从数组中排除所有小于 5 的元素。
+```cs
+var excludedNumbers = numbers.Where(x => x >= 5);
+```
+
+22. **查询并填充默认值**:如果数组中存在 null 值,用默认值 0 替换。
+```cs
+var replacedNulls = nullableNumbers.Select(x => x ?? 0).ToArray();
+```
+
+23. **查询并转换类型**:将字符串数组转换为整数数组。
+```cs
+var intNumbers = stringNumbers.Select(int.Parse).ToArray();
+```
+
+24. **查询并使用 OfType 过滤**:从对象数组中过滤出字符串类型的元素。
+```cs
+var stringElements = objects.OfType().ToList();
+```
+
+
+### 高级操作示例
+25. **合并数组**:使用 `Zip` 合并两个数组,生成新数组。
+```cs
+ var result = numbers1.Zip(numbers2, (x, y) => $"{x} {y}");
+```
+
+26. **生成序列**:创建包含从 1 到 10 的数组。
+```cs
+ var result = Enumerable.Range(1, 10);
+```
+
+27. **重复元素**:将一个元素重复多次,生成新数组。
+```cs
+ var result = Enumerable.Repeat("元素", 10);
+```
+
+28. **过滤特定类型**:从对象数组中过滤出字符串类型的值。
+```cs
+ var result = objects.OfType();
+```
+
+29. **查询并使用 Skip 跳过元素** :跳过数组中的前 3 个元素,然后取出剩余的元素。
+```cs
+ var remainingElements = numbers.Skip(3);
+```