根据唯一性对列表进行分组



这个问题是将列表转换为带有策略的字典的略微修改版本

我有 DTO <列表>其中 DTO 类看起来像这样,

private class DTO
    {
        public string Name { get; set; }
        public int Count { get; set; }
    }

我创建对象并将其添加到列表中。

var dto1 = new DTO { Name = "test", Count = 2 };
var dto2 = new DTO { Name = "test", Count = 3 };
var dtoCollection = new List<DTO> {dto1, dto2};

现在我的要求是我需要从 dtoCollection 创建一个列表,其中名称字段在整个列表中应该是唯一的。

例如,如果将上述 dtoCollection 转换为所需的列表,则结果列表应如下所示:

列表计数应为 1;

列表中的对象应该是单个 DTO,名称为"测试",计数为 5

其中,计数是通过汇总名称字段相同的所有DTO中的计数字段来获得的

尝试:

var result = dtoCollection.GroupBy(dto => dto.Name)
                          .Select(group => new DTO 
                                           {
                                               Name = group.Key,
                                               Count = group.Sum(dto => dto.Count) 
                                           })
                          .ToList();

这的工作原理是按名称对 DTO 进行分组,然后从每个组中提取从组的键和计数中命名的新 DTO,并将其成员计数的总和命名。

var newList = dtoCollection.GroupBy(d => d.Name)
             .Select(g => new DTO(){ Name=g.Key, Count=g.Select(d => d.Count).Sum()})
             .ToList();

最新更新