C# 根据唯一性对列表进行分组
这是一个稍微修改过的问题 我有一个列表,其中DTO类是这样的C# 根据唯一性对列表进行分组,c#,linq,list,lambda,C#,Linq,List,Lambda,这是一个稍微修改过的问题 我有一个列表,其中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 =
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};
var dto1=newdto{Name=“test”,Count=2};
var dto2=new DTO{Name=“test”,Count=3};
var dtoCollection=新列表{dto1,dto2};
现在,我的要求是需要从dtoCollection创建一个列表,其中Name字段在整个列表中应该是唯一的
例如,如果将上述dtoCollection从转换为所需列表,则生成的列表应如下所示:
列表var result = dtoCollection.GroupBy(dto => dto.Name)
.Select(group => new DTO
{
Name = group.Key,
Count = group.Sum(dto => dto.Count)
})
.ToList();
这是通过按名称对DTO进行分组来实现的,然后从每个组中提取一个新的DTO,该DTO是从组的键和计数集中命名为其成员计数的总和 如果我的DTO有一个名为“姓氏”的额外字段怎么办?考虑到姓氏对于一个给定的名字是唯一的。如何修改上面的查询。干净的方法是将其提取到密钥中,以及
GroupBy(dto=>new{dto.Name,dto.lasname})
然后从组中提取密钥的两个组件。但是,既然您确信姓氏对于名称是唯一的,那么您也可以使用我的原始代码提取组中第一个成员的姓氏:[…],姓氏=组。first()。姓氏,[…]
。如果我的DTO有一个名为姓氏的额外字段,该怎么办?考虑到姓氏对于一个给定的名字是唯一的。我如何修改上面的查询。@RockstartGroupBy(d=>new{d.Name,d.lasname})
var newList = dtoCollection.GroupBy(d => d.Name)
.Select(g => new DTO(){ Name=g.Key, Count=g.Select(d => d.Count).Sum()})
.ToList();