如何修改ASP.NET Core代码仅展示未完成Todo项?
实现仅展示未完成Todo事项的方案
要实现仅让用户查看未完成的Todo事项,核心是修改GetTodoItems接口,通过Linq过滤掉已完成(IsComplete = true)的项,不需要复杂的if-else语句,具体修改如下:
修改后的GetTodoItems接口代码
[HttpGet(Name = "GetTodoItems")] public async Task<ActionResult<IEnumerable<Todo>>> GetTodoItems() { // 仅返回IsComplete为false的未完成事项 var incompleteTodos = await _context.Todos.Where(todo => !todo.IsComplete).ToListAsync(); return Ok(incompleteTodos); }
补充说明
这个写法直接通过EF Core将过滤条件转换为SQL查询,在数据库层面完成数据筛选,比先查询所有数据再在内存中过滤的性能更优。
以下是你提供的其他相关代码(保持原样):
Todo类代码
public class Todo { public int Id { get; set; } public string? Name { get; set; } public bool IsComplete { get; set; } }
更新Todo项的代码
[HttpPut(Name = "PutTodoItem")] public async Task<IActionResult> UpdateTodoItem(Todo todo) { if (todo != null) { var existingTodo = await _context.Todos.FindAsync(todo.Id); if (existingTodo != null) { existingTodo.Name = todo.Name; existingTodo.IsComplete = todo.IsComplete; await _context.SaveChangesAsync(); return Ok(existingTodo); } } // 补充原代码缺失的异常分支返回逻辑 return BadRequest(); }
内容的提问来源于stack exchange,提问作者oddvocado
相关产品推荐
相关产品推荐

