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

C# LINQ按多字段排序 实现QuestionDataTypeId=0的数据排在末尾

问题原因

你原有代码的问题出在OrderByDescending的使用:当判断表达式返回布尔值时,true的排序权重要高于false,所以会把QuestionDataTypeId=0的行排到最前面,和你要的"0值排最后"的需求完全相反。

正确单条LINQ实现

两种写法都可以实现需求,推荐用可读性更高的三元运算符写法:

var data = entity
    // 第一优先级:非0行排前,0行排后
    .OrderBy(m => m.QuestionDataTypeId == 0 ? 1 : 0)
    // 第二优先级:按QuestionDataTypeId升序排列
    .ThenBy(m => m.QuestionDataTypeId)
    // 第三优先级:同类型下按DisplayOrder升序排列
    .ThenBy(m => m.DisplayOrder);

也可以直接对布尔结果升序排列,利用false < true的默认排序规则,效果和上面完全一致:

var data = entity
    .OrderBy(m => m.QuestionDataTypeId == 0)
    .ThenBy(m => m.QuestionDataTypeId)
    .ThenBy(m => m.DisplayOrder);

补充说明

以上两种写法都可以被EF Core等ORM框架正确翻译为SQL的CASE WHEN排序逻辑,不管是内存集合排序还是数据库查询都可以正常生效,不需要拆分两次查询再合并结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:21:00