如何获取公共类Lesson中OrderNum属性的最大值?
获取所有Lesson实例OrderNum最大值的正确做法
你的现有代码存在两个关键问题:
- 调用
model.Lessons.Max(x => x.OrderNum)后没有将结果赋值给任何变量,这个操作不会产生实际作用 - 如果
model.Lessons是空集合,直接调用Max会抛出InvalidOperationException异常
结合你在CreateLesson方法里的场景,推测你是想给新创建的Lesson设置一个比现有所有Lesson都大的OrderNum,以下是健壮的实现方式:
[HttpPost] [AuthorizeAdmin] public async Task<IActionResult> CreateLesson(LessonBindingModel model) { // 验证模型(建议启用这段代码,保证数据合法性) if (!ModelState.IsValid) { Debug.WriteLine("Invalid"); return View("CreateLesson", model); } // 获取现有Lesson的最大OrderNum,空集合时默认取0 int maxOrderNum = model.Lessons.DefaultIfEmpty().Max(x => x?.OrderNum ?? 0); // 给新Lesson设置OrderNum为最大值+1 model.Lesson.OrderNum = maxOrderNum + 1; // 提交数据 await _LessonService.Commit(model.Lesson); // 返回课程列表页 return RedirectToAction("Index", "Course", new { Category = model.Course.Category, id = model.Course.id }); }
代码说明:
DefaultIfEmpty():当model.Lessons为空时,返回一个包含null的单元素集合,避免直接调用Max抛出异常x?.OrderNum ?? 0:处理集合中元素为null的情况(如果存在的话),此时默认取0作为OrderNum的值,确保Max能正常计算出结果
如果能确保model.Lessons永远不为空且元素都不为null,也可以简化为:
int maxOrderNum = model.Lessons.Max(x => x.OrderNum); model.Lesson.OrderNum = maxOrderNum + 1;
内容的提问来源于stack exchange,提问作者user20654632
相关产品推荐
相关产品推荐

