使用LINQ筛选含指定trackingCode且排除特定值的货运跟踪记录
正确实现方案
你可以直接用LINQ的Any方法完成两个维度的条件判断,代码如下:
首先确保引入LINQ命名空间:
using System.Linq;
查询逻辑:
var filteredShipments = shipments.Where(shipment => // 条件1:跟踪记录中存在code为DSP的条目 shipment.trackings.Any(t => t.trackingCode == "DSP") // 条件2:跟踪记录中完全不存在code为CCI或POD的条目 && !shipment.trackings.Any(t => t.trackingCode == "CCI" || t.trackingCode == "POD") ).ToList();
遍历结果即可得到符合要求的货运记录:
foreach(var shipment in filteredShipments) { Console.WriteLine(shipment.trackingNumber); // 输出32021001002,符合预期 }
原写法的问题
你之前的写法存在两个逻辑漏洞:
- 仅判断了单条跟踪记录同时满足
等于DSP和不等于CCI,没有覆盖「整票货物的所有跟踪记录都不能出现CCI/POD」的要求,会把同时有DSP和CCI记录的货件(比如示例中的32021001003)也误筛选进来。 FirstOrDefault在找不到符合条件的跟踪记录时会返回null,后续用Contains判断不仅逻辑冗余,还存在空引用的风险。
内容的提问来源于stack exchange,提问作者joegreentea
相关产品推荐
相关产品推荐

