You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取公共类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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:05:19