首页 > 解决方案 > 为多个条件实现按逻辑排序以对最终结果排序的问题

问题描述

我有一个网格,我在其中显示特定部门的代理列表。这些代理商是发布房屋租赁清单的房地产代理商。

网格显示基本信息,如,AgentName等。NumberofActiveListingsNumberofSoldAndExpiredListings

现在要求默认情况下,网格中的列表应根据活动列表以降序(NumberofActiveListings)进行排序。NumberofSoldAndExpiredListings如果多个代理具有相同数量的活动列表,则按降序对代理列表进行排序。如果多个代理的数量相同NumberofActiveListingsNumberofSoldAndExpiredListings则代理列表应按Name升序排序。

此外,用户可以单击网格上的单个列,数据将根据该列进行排序。

下面是保存最终结果的 DTO 类:

     public class AgentResultDto
            {
                public int AgentId { get; set; }
                public string AgentName { get; set; }
                public int NumberofActiveListings { get; set; }
                public int NumberofSoldAndExpiredListings { get; set; }
            }
    
        public class GridviewInput 
        {
            public string SortingColumn { get; set; } //hold the column name user will click on to sort the data
            //other params
        }

public virtual async Task<AgentResultDto> GetAgents(GridviewInput model)
  {
     List<AgentResultDto> agents = new List<AgentResultDto>();
     //logic to populate agent list
     
     agents = agents.OrderBy(model.SortingColumn).ToList(); 
  }

但是在这里,我对如何指定条件感到困惑,如果 NumberofActiveListings 相同,则按顺序排列,NumberofSoldAndExpiredListings如果相同,则按升序NumberofSoldAndExpiredListings排列。AgentName

谁能指导我按逻辑顺序实现这个要求?

标签: c#entity-frameworklinqentity-framework-6

解决方案


至于按多列排序,请查看与初始 .OrderBy() 和 .OrderByDescending() 一起工作的 .ThenBy() 和 .ThenByDescending() 函数。

至于动态选择要排序的列,请查看Dynamic LINQ OrderBy on IEnumerable<T> / IQueryable<T>


推荐阅读