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

如何使用LINQ实现按类别去重并合并同类别唯一值?

使用LINQ实现分组去重并合并值的需求

这其实是个很典型的分组+去重+字符串拼接需求,用LINQ可以很优雅地实现,我给你一步步拆解:

首先,我们先假设你的数据是一个实体类集合,先定义一个简单的类来承载数据:

public class CategoryItem
{
    public int CategoryId { get; set; }
    public string Value { get; set; }
}

接下来初始化你的原始测试数据:

var rawData = new List<CategoryItem>
{
    new CategoryItem { CategoryId = 1, Value = "val1" },
    new CategoryItem { CategoryId = 1, Value = "val2" },
    new CategoryItem { CategoryId = 1, Value = "val2" },
    new CategoryItem { CategoryId = 2, Value = "test1" },
    new CategoryItem { CategoryId = 2, Value = "test1" },
    new CategoryItem { CategoryId = 3, Value = "data1" },
    new CategoryItem { CategoryId = 3, Value = "data2" },
    new CategoryItem { CategoryId = 3, Value = "data2" }
};

核心LINQ查询语句

下面就是实现需求的关键代码,我会逐段解释作用:

var groupedResult = rawData
    // 第一步:按CategoryId分组,把相同ID的项归为一组
    .GroupBy(item => item.CategoryId)
    // 第二步:对每个分组进行处理,生成目标格式的结果
    .Select(group => new 
    {
        CategoryId = group.Key, // 分组的键就是对应的CategoryId
        // 提取分组内的所有Value,去重后用". "拼接,最后加上结尾的句号匹配格式
        Value = string.Join(". ", group.Select(item => item.Value).Distinct()) + "."
    });

验证结果

如果你想输出结果看看是否符合预期,可以用foreach遍历打印:

// 先打印表头
Console.WriteLine($"{nameof(CategoryItem.CategoryId),-12} {nameof(CategoryItem.Value)}");
foreach (var resultItem in groupedResult)
{
    Console.WriteLine($"{resultItem.CategoryId,-12} {resultItem.Value}");
}

输出结果会和你期望的完全一致:

CategoryId    Value
1             val1. val2.
2             test1.
3             data1. data2.

关键步骤说明

  1. GroupBy:将原始数据按照CategoryId进行分组,确保每个CategoryId对应一个独立的组集合。
  2. Distinct:对每个分组内的Value去重,保证每个值只保留一次,避免重复内容。
  3. string.Join:把去重后的多个Value用. 连接成一个连贯的字符串,最后额外加一个句号,完全匹配你需要的输出格式。

如果你的数据是从数据库中查询的(比如用EF Core),这段代码同样适用——Distinct和GroupBy会被转换为对应的SQL语句在数据库端执行,最终内存中的处理逻辑和上述完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:07:01