C#组列表并将计数放入列表变量

时间:2017-05-10 15:34:04

标签: c# list linq

我有一个列表,例如:

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

提前致谢!

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两者密钥和汇总实体。