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

多条件OrderBy排序逻辑实现问题:房产经纪人列表网格排序需求

C# 多条件排序实现方案

注意你原有代码中GetAgents方法的返回值存在笔误,你需要返回经纪人列表,建议修改为async Task<List<AgentResultDto>>。

实现逻辑说明

  • 无用户指定排序列时,走默认三级排序规则:NumberofActiveListings降序→NumberofSoldAndExpiredListings降序→AgentName升序
  • 用户指定排序列时,优先按用户选择的列排序,同值场景走默认兜底规则,保证排序结果的确定性

代码实现(无反射、性能最优版)

直接用switch匹配排序列,避免反射带来的性能损耗和安全风险,代码如下:

public class GridviewInput 
{
    public string SortingColumn { get; set; } 
    // 可扩展排序方向字段,按需新增
    // public bool IsAscending { get; set; }
    //other params
}

public virtual async Task<List<AgentResultDto>> GetAgents(GridviewInput model)
{
    List<AgentResultDto> agents = new List<AgentResultDto>();
    // 原有填充经纪人列表的业务逻辑
    
    IOrderedEnumerable<AgentResultDto> sortedAgents;

    // 优先判断是否存在用户指定的排序列
    if (!string.IsNullOrWhiteSpace(model.SortingColumn))
    {
        // 匹配用户选择的排序列作为第一排序维度
        sortedAgents = model.SortingColumn.Trim() switch
        {
            nameof(AgentResultDto.AgentId) => agents.OrderBy(a => a.AgentId),
            nameof(AgentResultDto.AgentName) => agents.OrderBy(a => a.AgentName),
            nameof(AgentResultDto.NumberofActiveListings) => agents.OrderByDescending(a => a.NumberofActiveListings),
            nameof(AgentResultDto.NumberofSoldAndExpiredListings) => agents.OrderByDescending(a => a.NumberofSoldAndExpiredListings),
            // 未知列 fallback 到默认第一排序规则
            _ => agents.OrderByDescending(a => a.NumberofActiveListings)
        };
        
        // 追加兜底排序规则,同值场景按规则排序
        sortedAgents = sortedAgents
            .ThenByDescending(a => a.NumberofSoldAndExpiredListings)
            .ThenBy(a => a.AgentName);
    }
    else
    {
        // 无指定排序列时走默认三级排序
        sortedAgents = agents
            .OrderByDescending(a => a.NumberofActiveListings)
            .ThenByDescending(a => a.NumberofSoldAndExpiredListings)
            .ThenBy(a => a.AgentName);
    }

    agents = sortedAgents.ToList();
    return agents;
}

扩展说明

如果需要支持用户自定义排序方向(升序/降序),可以给GridviewInput新增IsAscending布尔字段,在switch分支中判断使用OrderBy还是OrderByDescending即可。
如果排序列后续会频繁新增不想维护switch分支,也可以通过表达式树构建动态排序逻辑,不过性能略低于硬编码实现。

内容的提问来源于stack exchange,提问作者I Love Stackoverflow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:03