我有一个列表,例如:
Id = 1, Name = Microsoft, Country = USA, Match = null
Id = 2, Name = Google, Country = USA, Match = null
Id = 1, Name = Microsoft, Country = USA, Match = null
现在我想按名称对列表进行分组,我这样做:
var List = result.GroupBy(x => x.Name).ToList();
我的目标是将重复数量保密到Match
。
所以列表看起来像这样:
Id = 1, Name = Microsoft, Country = USA, Match = 2
Id = 2, Name = Google, Country = USA, Match = 1
提前致谢!
答案 0 :(得分:7)
我会按所有三个属性进行分组,因此它们将为组中的所有项目提供相同的值。这将简化构建聚合实体:
var List = result.GroupBy(x => new { x.Name, x.Id, x.Country })
.Select(g => new YourType {
Id = g.Key.Id,
Name = g.Key.Name,
Country = g.Key.Country,
Match = g.Count()
})
.ToList();
如果您在其他国家/地区(不仅仅是美国)拥有Microsoft,并且您希望仅获取公司名称的重复数量(无论它是否位于美国),那么您应该从中删除Country
两者密钥和汇总实体。