如何将含Status字段的Contract列表按Active状态前置排序?
解决Contract列表按Status="Active"优先排序的问题
你的当前代码有两个关键问题导致无法实现需求:
- LINQ的
OrderBy方法不会修改原序列,它会返回一个新的排序后的序列,你必须接收这个返回值才能得到排序结果 bool类型默认升序排序时,false会排在true前面,所以OrderBy(x => x.Status == "Active")会把非Active的元素排在前面,和你的需求相反
修正后的代码
直接使用OrderByDescending让Status == "Active"为true的元素排在最前面,同时接收排序后的序列:
IEnumerable<Contract> mappedContracts = MapContractsToContracts(contracts); var sortedContracts = mappedContracts.OrderByDescending(x => x.Status == "Active"); return sortedContracts.ToList();
或者简化成链式调用:
return MapContractsToContracts(contracts) .OrderByDescending(x => x.Status == "Active") .ToList();
进阶:Active内部再排序
如果需要在活跃合约内部再按其他字段(比如创建时间)排序,可以追加ThenBy/ThenByDescending:
return MapContractsToContracts(contracts) .OrderByDescending(x => x.Status == "Active") .ThenByDescending(x => x.CreatedDate) // 活跃合约按创建时间倒序排 .ToList();
内容的提问来源于stack exchange,提问作者Maffe
相关产品推荐
相关产品推荐

