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

如何用C# LINQ将Product数据转换为ProductwithCategory模型?

实现Product到ProductwithCategory的LINQ转换

原模型与输入数据

Product类定义

public class Product
{
    public int ProductId { get; set; }
    public string CategoryName { get; set; }
    public string CategoryValue { get; set; }
}

输入JSON数据

[
  {
    "productId": 1,
    "categoryName": "A",
    "categoryValue": "AV"
  },
  {
    "productId": 1,
    "categoryName": "B",
    "categoryValue": "BV"
  },
  {
    "productId": 1,
    "categoryName": "C",
    "categoryValue": "CV"
  },
  {
    "productId": 2,
    "categoryName": "B",
    "categoryValue": "BV"
  },
  {
    "productId": 3,
    "categoryName": "C",
    "categoryValue": "CV"
  }
]

目标模型与预期输出

ProductwithCategory类定义

public class ProductwithCategory
{
    public int ProductId { get; set; }
    public Dictionary<string, string> allCategoriesWithvalue { get; set; } = new Dictionary<string, string>();
}

预期输出JSON结构

[
  {
    "productId": 1,
    "allCategoriesWithvalue": {
      "A": "AV",
      "B": "BV",
      "C": "CV"
    }
  },
  {
    "productId": 2,
    "allCategoriesWithvalue": {
      "A": "",
      "B": "BV",
      "C": ""
    }
  },
  {
    "productId": 3,
    "allCategoriesWithvalue": {
      "A": "",
      "B": "",
      "C": "CV"
    }
  }
]

LINQ实现代码

// 获取所有不重复的分类名称
var allCategoryNames = products.Select(p => p.CategoryName).Distinct().ToList();

// 分组转换为目标模型
var result = products
    .GroupBy(p => p.ProductId)
    .Select(g => new ProductwithCategory
    {
        ProductId = g.Key,
        allCategoriesWithvalue = allCategoryNames
            .ToDictionary(
                category => category,
                category => g.FirstOrDefault(p => p.CategoryName == category)?.CategoryValue ?? ""
            )
    })
    .ToList();

代码说明

  1. 先提取所有存在的分类名称并去重,保证每个产品的字典都包含全部分类键。
  2. 按ProductId分组,将同一产品的多条分类记录聚合到一组。
  3. 对每个分组构建目标字典:遍历全部分类名称,匹配当前分组中对应分类的值,无匹配则填充空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:50:13