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

如何用C# LINQ对含子产品列表的OrdersList按Product.Id分组?

按产品ID分组的LINQ查询修正

你原代码的问题在于:

  • 没有先扁平化所有订单中的产品列表,直接对订单集合操作无法获取单个产品
  • 错误引用了OrdersList.Product.Id,OrdersList是订单集合,不存在Product属性,应该访问单个订单下的产品ID

假设你的数据结构如下(方便理解):

public class Order
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public List<Product> Products { get; set; }
}

public class Product
{
    public int Id { get; set; }
    // 其他属性如 Name、Price 等
}

正确的查询语法写法

var groupedProducts = from order in OrdersList
                      // 嵌套遍历每个订单下的产品,实现扁平化
                      from product in order.Products
                      // 按产品ID分组
                      group product by product.Id into productGroup
                      // 选择分组结果,可按需扩展统计信息
                      select new
                      {
                          ProductId = productGroup.Key,
                          // 该ID对应的所有产品实例
                          ProductItems = productGroup.ToList(),
                          // 统计该产品出现在多少个不同订单中
                          RelatedOrdersCount = productGroup.Select(p => p.Order.Id).Distinct().Count()
                      };

正确的方法语法写法

var groupedProducts = OrdersList
    // 扁平化所有订单的产品,得到单个产品的集合
    .SelectMany(order => order.Products)
    // 按产品ID分组
    .GroupBy(product => product.Id)
    // 转换为可读的结果结构
    .Select(group => new
    {
        ProductId = group.Key,
        ProductItems = group.ToList(),
        RelatedOrdersCount = group.Select(p => p.Order.Id).Distinct().Count()
    });

关键说明

  • SelectMany是核心:它会把每个订单的Products列表展开,将多层集合转换为单层的产品集合,这样才能对单个产品进行分组操作。
  • 如果不需要额外统计信息,直接保留GroupBy的结果即可,无需后续的Select。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:05:28