6

这个问题是Convert List<T> to Dictionary with strategy的略微修改版本

我有 List < 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 创建一个 List,其中 Name 字段在整个 List 中应该是唯一的。

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

列表 <DTO> 计数应为 1;

列表中的对象应该是单个 DTO,名称为“test”,计数为 5

其中 Count 是通过对 Name 字段相同的所有 DTO 中的 Count 字段求和获得的

4

2 回答 2

7

尝试:

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

这通过按名称对 DTO 进行分组,然后从每个组中提取一个新的 DTO,该 DTO 由组的键和计数设置为其成员计数的总和。

于 2012-11-14T13:00:16.030 回答
3
var newList = dtoCollection.GroupBy(d => d.Name)
             .Select(g => new DTO(){ Name=g.Key, Count=g.Select(d => d.Count).Sum()})
             .ToList();
于 2012-11-14T13:00:59.923 回答