这个问题是将列表
我有 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 转换为所需的列表,则结果列表应如下所示:
列表
列表中的对象应该是单个 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();