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

如何用LINQ获取所有订单已发货的公司ID列表?

如何用LINQ获取所有订单已发货的公司ID列表

原代码问题分析

你的代码使用了两层Any(),逻辑是只要公司存在至少一个客户有已发货订单就会被选中。但这不符合需求——我们需要的是公司旗下所有客户的所有订单都已发货,没有任何未发货的订单。

正确的LINQ写法

写法一:嵌套使用All()

通过All()确保层级上的所有元素都满足条件:

var companyIds = Companies
    .Where(co => co.Customers.All(cu => cu.Orders.All(o => o.Shipped)))
    .Select(co => co.CompanyID)
    .ToList();

逻辑说明:

  • 外层co.Customers.All(...):公司的每一个客户都要满足后续条件;
  • 内层cu.Orders.All(o => o.Shipped):该客户的所有订单都已发货;
  • 若客户没有订单,cu.Orders.All(...)会返回true(空集合的All操作默认判定为满足条件),这类客户不会影响结果。

写法二:反向排除未达标公司

通过!Any()排除存在未发货订单的公司,逻辑更直观:

var companyIds = Companies
    .Where(co => !co.Customers.Any(cu => cu.Orders.Any(o => !o.Shipped)))
    .Select(co => co.CompanyID)
    .ToList();

逻辑说明:

  • 内层cu.Orders.Any(o => !o.Shipped):检查客户是否存在未发货订单;
  • 外层!co.Customers.Any(...):排除所有存在这类客户的公司,剩下的就是所有订单都已发货的公司。

结果验证

根据你的表数据:

  • CompanyA存在未发货订单(OrderID 5),会被排除;
  • CompanyB、CompanyC的所有订单均已发货,最终返回[2, 3],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:40:19