C#按多条件排序货运记录列表技术求助
多条件货运记录排序解决方案
核心逻辑拆解
你的排序规则需要分场景处理,不能直接用OrderBy+ThenBy的简单组合,关键是给逾期记录和未逾期记录设置不同的排序优先级:
- 第一步:所有记录先按
ExpectedShipmentDate升序排列 - 第二步:仅对已逾期(
ExpectedShipmentDate < 当前时间)的记录,按NeedsToBePunctual降序(true在前,false在后);未逾期记录忽略该字段,保持第一步的日期排序
代码实现示例(C# LINQ)
假设你用的是.NET环境,可通过构造自定义排序键实现:
var currentTime = DateTime.Now; var sortedShipments = shipments .OrderBy(s => s.ExpectedShipmentDate) // 优先按发货日期升序 .ThenBy(s => // 逾期记录:需要准时的排前面(给0),不需要的排后面(给1) s.ExpectedShipmentDate < currentTime ? s.NeedsToBePunctual ? 0 : 1 : 2); // 未逾期记录统一给2,确保不会打乱日期排序
为什么之前的方法失效?
如果直接用OrderBy(s => s.ExpectedShipmentDate).ThenBy(s => s.NeedsToBePunctual),会导致未逾期记录也按NeedsToBePunctual排序,违背了规则3的要求。上面的写法通过给未逾期记录分配相同的排序键值,让它们保持第一步的日期顺序,同时只在逾期组内区分优先级。
内容的提问来源于stack exchange,提问作者Fatih Karaoglu
相关产品推荐
相关产品推荐

