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

如何使用C# LINQ实现多分类标签实体的分类-关联实体映射

使用C# LINQ实现分类与实体的关联映射

前提修正

首先注意原Entity类定义中的笔误:Entity Name会导致递归引用错误,应该改为string Name,修正后的类定义如下:

public class Entity
{
    public string Name { get; set; }
    public List<Category> Categories { get; set; }
}

public class Category
{
    public string Name { get; set; }
    // 可根据业务需求添加其他属性
}

LINQ实现方案

通过SelectMany展开实体与分类的关联关系,再结合GroupBy和ToDictionary/Select即可实现需求:

方案1:转换为字典(键为分类名,值为实体名拼接字符串)

var categoryEntityMap = listentities
    // 展开每个实体的所有分类,与实体名形成一对一的映射
    .SelectMany(entity => entity.Categories.Select(cat => new { CategoryName = cat.Name, EntityName = entity.Name }))
    // 按分类名分组
    .GroupBy(item => item.CategoryName)
    // 转换为字典,同时将每组的实体名用逗号拼接
    .ToDictionary(
        group => group.Key,
        group => string.Join(", ", group.Select(item => item.EntityName))
    );

方案2:转换为实体列表(便于生成表格或后续处理)

如果需要得到类似期望表格的结构化数据,可改用Select生成自定义对象:

var categoryEntityList = listentities
    .SelectMany(entity => entity.Categories.Select(cat => new { CategoryName = cat.Name, EntityName = entity.Name }))
    .GroupBy(item => item.CategoryName)
    .Select(group => new
    {
        Category = group.Key,
        Entities = string.Join(", ", group.Select(item => item.EntityName))
    })
    .ToList();

代码说明

  1. SelectMany:将每个实体的Categories集合展开,把每个分类与所属实体的名称绑定,形成一个扁平的<分类名, 实体名>集合。
  2. GroupBy:以分类名为键,将所有关联的实体名聚合到同一分组下。
  3. ToDictionary/Select:将分组结果转换为目标格式,用string.Join把实体名拼接成逗号分隔的字符串,与期望输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:16:32