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

使用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,符合预期
}

原写法的问题

你之前的写法存在两个逻辑漏洞:

  1. 仅判断了单条跟踪记录同时满足等于DSP和不等于CCI,没有覆盖「整票货物的所有跟踪记录都不能出现CCI/POD」的要求,会把同时有DSP和CCI记录的货件(比如示例中的32021001003)也误筛选进来。
  2. FirstOrDefault在找不到符合条件的跟踪记录时会返回null,后续用Contains判断不仅逻辑冗余,还存在空引用的风险。

内容的提问来源于stack exchange,提问作者joegreentea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:24:03