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

求助:如何使用LINQ按CompletionPercentage多数值条件排序列表?

修正后的排序代码及说明

原代码存在的问题

  • Where 语句缺少闭合括号,导致语法错误
  • 排序逻辑错误:C# 中布尔值排序时 false(对应数值0)会排在 true(对应数值1)之前,直接用条件作为排序键会导致不符合条件的项排在前面
  • 第一个排序条件错误地使用了 >1 && <99,与需求的 >0 && <100 不符

修正后的代码

var data = myCollection
    .Where(x => getCourses.CourseLevel.Contains(x.CourseLevel)) // 补充闭合括号
    .OrderBy(x => x.CompletionPercentage switch
    {
        > 0 and < 100 => 0, // 优先组,排序值最小
        0 => 1,             // 次优先级组
        100 => 2,           // 最后组
        _ => 0              // 处理边界情况(如null?根据实际情况调整)
    })
    .ToList(); // ToList() 放在最后更高效,避免提前枚举集合

兼容旧版C#的写法

如果项目不支持C# 8.0及以上的switch表达式,可使用三元运算符实现:

var data = myCollection
    .Where(x => getCourses.CourseLevel.Contains(x.CourseLevel))
    .OrderBy(x => 
        x.CompletionPercentage > 0 && x.CompletionPercentage < 100 ? 0 :
        x.CompletionPercentage == 0 ? 1 : 2)
    .ToList();

核心逻辑说明

  • 为每个分组分配明确的排序优先级数值:0(最高优先级)、1(次优先级)、2(最低优先级),通过OrderBy按数值从小到大排序,完全匹配需求的展示顺序
  • 将ToList()移到链式调用的最后,避免提前将集合加载到内存,提升查询性能
  • 修复了Where语句的语法错误,确保过滤逻辑正常执行

内容的提问来源于stack exchange,提问作者CodeLearner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:30:52