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

在C# LINQ分组时更新同一对象DocCount属性的极简方案

无需新建类的Contact列表分组合并实现

现有类定义

public class Contact
{
    public int Id { get; set; }
    public string Email { get; set; }
    public string DisplayName { get; set; }
    public int DocCount { get; set; }
    public string DocName { get; set; }
}

原始数据列表

var contactList = new List<Contact>()
{
    new Contact(){ Id = 1, Email = "abc@abc.com", DisplayName = "ABC", DocCount = 0, DocName = "testdoc1"},
    new Contact(){ Id = 1, Email = "abc@abc.com", DisplayName = "ABC", DocCount = 0, DocName = "testdoc2"},
    new Contact(){ Id = 1, Email = "abc@abc.com", DisplayName = "ABC", DocCount = 0, DocName = "testdoc3"},
    new Contact(){ Id = 2, Email = "xyz@abc.com", DisplayName = "XYZ", DocCount = 0, DocName = "testdoc1"},
    new Contact(){ Id = 2, Email = "xyz@abc.com", DisplayName = "XYZ", DocCount = 0, DocName = "testdoc2"},
    new Contact(){ Id = 2, Email = "xyz@abc.com", DisplayName = "XYZ", DocCount = 0, DocName = "testdoc3"},
    new Contact(){ Id = 3, Email = "mop@abc.com", DisplayName = "MOP", DocCount = 0, DocName = "testdoc1"},
    new Contact(){ Id = 3, Email = "mop@abc.com", DisplayName = "MOP", DocCount = 0, DocName = "testdoc2"},
};

极简实现(无需新建类)

直接用LINQ分组后构造目标Contact对象:

var mergedContacts = contactList
    .GroupBy(c => new { c.Id, c.Email, c.DisplayName })
    .Select(g => new Contact
    {
        Id = g.Key.Id,
        Email = g.Key.Email,
        DisplayName = g.Key.DisplayName,
        DocCount = g.Count(),
        DocName = string.Join(" ", g.Select(c => c.DocName))
    })
    .ToList();

实现说明

  • 用匿名类型作为GroupBy的分组键,确保Id、Email、DisplayName完全匹配的项被归为同一组
  • 在Select中直接实例化Contact,将组内文档总数赋值给DocCount,用string.Join拼接所有文档名称到DocName
  • 最终得到的mergedContacts完全符合需求的输出结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:25:27